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()。这一点,日后要多加注意。