链表迭代
LinkedList Iteration
我是编码新手,正在尝试迭代链表。下面是问题:创建一个元素范围从 1 到 8 的链表。我需要反转列表,但有一个条件,即如果 num 给出为 2。输出应按以下方式生成:[2, 1,4,3,6,5,8,7].
请在下面找到代码。如果 num 是 2 或 4,我尝试并能够得到相应的答案。
LinkedList<Integer> list = new LinkedList<>();
for (int i = 1; i < 9; i++) {
list.add(i);
}
int n = 2;
LinkedList<Integer> outList = new LinkedList<>();
while(list.size()>0) {
for(int i=n-1;i>=0;i--) {
outList.add(list.get(i));
list.remove(i);
}
}
System.out.println(outList);
不知道这种方式是否合适。请帮我找到合适的解决方案。
我面临的问题是,如果我将 num 设为 3。我得到 IndexOutOfBoundsException,因为在最后一次迭代中只有 2 个元素。
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 2, Size: 2
at java.base/java.util.LinkedList.checkElementIndex(LinkedList.java:559)
at java.base/java.util.LinkedList.get(LinkedList.java:480)
at com.src.User.main(User.java:21)
在您的解决方案中,问题在于最后一次内部迭代。每次迭代都是 n 个元素块的反转,其中作为最后一步它可以小于 n。考虑到这一点,可以使用 min(n-1,list.size()-1)。
LinkedList<Integer> list = new LinkedList<>();
for (int i = 1; i < 9; i++) {
list.add(i);
}
int n = 4;
LinkedList<Integer> outList = new LinkedList<>();
while(list.size()>0) {
for(int i=Math.min(n-1,list.size()-1);i>=0;i--) {
outList.add(list.get(i));
list.remove(i);
}
}
反转完整列表,n与列表长度相同:
它可以添加到列表(如队列),然后从后面检索(如堆栈)。所以它不需要索引。
LinkedList<Integer> list = new LinkedList<>();
for (int i = 1; i < 9; i++) {
list.addLast(i);
}
int n = 2;
System.out.println(list);
LinkedList<Integer> outList = new LinkedList<>();
while(list.size()>0) {
outList.addLast(list.removeLast());//last element retrieved first
}
System.out.println(outList);
我是编码新手,正在尝试迭代链表。下面是问题:创建一个元素范围从 1 到 8 的链表。我需要反转列表,但有一个条件,即如果 num 给出为 2。输出应按以下方式生成:[2, 1,4,3,6,5,8,7].
请在下面找到代码。如果 num 是 2 或 4,我尝试并能够得到相应的答案。
LinkedList<Integer> list = new LinkedList<>();
for (int i = 1; i < 9; i++) {
list.add(i);
}
int n = 2;
LinkedList<Integer> outList = new LinkedList<>();
while(list.size()>0) {
for(int i=n-1;i>=0;i--) {
outList.add(list.get(i));
list.remove(i);
}
}
System.out.println(outList);
不知道这种方式是否合适。请帮我找到合适的解决方案。
我面临的问题是,如果我将 num 设为 3。我得到 IndexOutOfBoundsException,因为在最后一次迭代中只有 2 个元素。
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 2, Size: 2
at java.base/java.util.LinkedList.checkElementIndex(LinkedList.java:559)
at java.base/java.util.LinkedList.get(LinkedList.java:480)
at com.src.User.main(User.java:21)
在您的解决方案中,问题在于最后一次内部迭代。每次迭代都是 n 个元素块的反转,其中作为最后一步它可以小于 n。考虑到这一点,可以使用 min(n-1,list.size()-1)。
LinkedList<Integer> list = new LinkedList<>();
for (int i = 1; i < 9; i++) {
list.add(i);
}
int n = 4;
LinkedList<Integer> outList = new LinkedList<>();
while(list.size()>0) {
for(int i=Math.min(n-1,list.size()-1);i>=0;i--) {
outList.add(list.get(i));
list.remove(i);
}
}
反转完整列表,n与列表长度相同:
它可以添加到列表(如队列),然后从后面检索(如堆栈)。所以它不需要索引。
LinkedList<Integer> list = new LinkedList<>();
for (int i = 1; i < 9; i++) {
list.addLast(i);
}
int n = 2;
System.out.println(list);
LinkedList<Integer> outList = new LinkedList<>();
while(list.size()>0) {
outList.addLast(list.removeLast());//last element retrieved first
}
System.out.println(outList);