首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LinkedList迭代

LinkedList迭代
EN

Stack Overflow用户
提问于 2022-01-23 13:58:01
回答 1查看 49关注 0票数 -1

我刚开始编写代码,我正在尝试迭代一个链接列表。下面的问题是:创建一个Linkedlist,其元素范围从1到8不等。我需要反转列表,但有一个条件,即如果num为2。产出应以以下方式生成:2、1、4、3、6、5、8、7。

请找到下面的代码。我试过,如果num是2或4,我就能得到相应的答案。

代码语言:javascript
复制
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,因为在最后一次迭代中只有两个元素。

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-23 14:25:14

在您的解决方案中,问题将与最后的内部迭代有关。每一次迭代都是n个元素块的反转,作为最后一步,可以使用min(n-1,list.size()-1)来考虑这一点。

代码语言:javascript
复制
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与列表的长度相同:

可以将其添加到列表(如队列)中,然后从后面(如堆栈)检索。所以它不需要索引。

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70822749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档