链表迭代

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);