创建一个空的linkedlist通过使用ListIterator。将若干个Integer插入到这个List中,插入时,总是插入到List中间

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

猜你喜欢

转载自blog.csdn.net/qq_41791653/article/details/80008919