我刚开始编写代码,我正在尝试迭代一个链接列表。下面的问题是:创建一个Linkedlist,其元素范围从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,因为在最后一次迭代中只有两个元素。
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)发布于 2022-01-23 14:25:14
在您的解决方案中,问题将与最后的内部迭代有关。每一次迭代都是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);https://stackoverflow.com/questions/70822749
复制相似问题