错误代码
public static Node createLinkedList(List<Integer> data){
Node head=null;
Node last=null;
while(data!=null&&!data.isEmpty()){
Node node=new Node(data.get(0));
if(head==null){
head=node;
last=head;
}
last.setNext(node);
last=node;
data=data.subList(1, data.size());
}
return head;
}
(输出异常)当data的list.size()=1时,执行last.setNext(node);前, head、last、node均指向第一个节点。执行后,head、last、node均指向一个节点,该节点的getNest();是指向自己的。不符合要求,在打印该节点的时候是死循环。修复方法
if(head!=null&&head==head.getNext()){
head.setNext(null);
}
(输出正常)当data的list.size()>=2时,第二次进入循环时,head、last均指向第一个节点,node指向新节点。执行last.setNext(node);后,第一个节点 指向新节点, 新节点指向 null,结果正确了,后面一直正确。
写到这里突然发现只要这样改就行了。
if(head==null){
head=node;
last=head;
}//*****
else{
last.setNext(node);
}//*******
last=node;
再优化一下,也就是先写调用方法后写赋值。哈哈哈~ 感觉是个标题党
public static Node createLinkedList(List<Integer> data){
Node head=null;
Node last=null;
while(data!=null&&!data.isEmpty()){
Node node=new Node(data.get(0));
if(head!=null){
last.setNext(node);
}else{
head=node;
}
last=node;
data=data.subList(1, data.size());
}
return head;
}