ListIterator里面的add()方法刚好能够实现这个功能。下面开始介绍add()方法(在这里我直接引用goodbaby728的博客,如有侵权,联系我后立即删除)
最终输出结果为ADEBC
这题的解决代码如下:
package p411; import java.util.LinkedList; import java.util.ListIterator; public class MiddleInsert2 { static void Insert(LinkedList<Integer> linkedList,Integer [] ia){ for(Integer i:ia){ ListIterator<Integer> lt = linkedList.listIterator((linkedList.size()/2));//每次循坏里面都ListIterator直接指向 //linkedList的中间 lt.add(i); } System.out.println(linkedList); } static class Test{ public static void main(String[] args) { LinkedList<Integer>linkedList =new LinkedList<Integer>(); Integer[] a =new Integer[]{1,2,3,4,5,6,7}; Insert(linkedList,a); } } }
感想:之前我曾想用两个ListIterator进行这种操作,li2操作给定的若干个Integer组成的列,li1操作要输出的列。具体代码如下:
package p411; import java.util.LinkedList; import java.util.ListIterator; public class MiddleInsert { LinkedList<Integer> linkedList =new LinkedList<Integer>(); ListIterator<Integer> li1=linkedList.listIterator(); ListIterator<Integer> li2; MiddleInsert(Integer[] a){ LinkedList<Integer> reserlinkList =new LinkedList<Integer>(); //把数组a里面的所有数据传入 for(Integer i :a){ reserlinkList.add(i); // linkedList.add(i); } // li1 =linkedList.listIterator(); li2=reserlinkList.listIterator(); for(int i=0;i<a.length;i++){ if(i%2==0){ li1.next(); li1.set(li2.next()); } else{ li1.previous();//问题出现在这 li1.set(li2.next()); } } } void out(){ System.out.println(linkedList); } static class Test{ public static void main(String[] args) { Integer[] a=new Integer[]{1,2,3,4,5}; MiddleInsert mid =new MiddleInsert(a); mid.out(); } } }
其中li2顺序移动,li1向前移动一次,再向后移动一次即可完成题目要求的总是在中间插入。
但在运行中得出的结果却不对,仔细思考后认为,当linkList最开始为空,当我插入一个值之后,里面就一个元素,当想再次插入时却出现问题了,调用li1.previous()方法时会出现问题。因为该list列中只有一个元素,不存在还能往前移动。
感想:ListIterator.add()方法在thinking in java中并未提及,因此个人猜想这道题可能有其他的解决办法,而且,对于ListIterator.add()方法,貌似能够实现在列内元素只有一个元素的时候在前面插入元素。(这里猜想是不是因为,.add()指向的是.previous()后面,.next()方法前面的位置。阅读最上面那段文字后,大概明白确实是这么一回事)。对于Iterator和ListIterator个人认为ListIterator比Iterator要强大太多。后者提供了更多方法,而且更关键的两点就是它多了“读”之外的“写”的功能和双向移动的功能。
此外我在编写代码的过程中,经常会出现空指针异常,即未创建List表,仅仅是声明list后就使用ListIterator it =list1.ListIterator()。这一点,日后要多加注意。