首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

:简单的单向链表,this.next.add(newNode)与add(this.next)的区别

2014-04-20 
求救:简单的单向链表,this.next.add(newNode)与add(this.next)的区别class Link{// 链表的完成类class Nod

求救:简单的单向链表,this.next.add(newNode)与add(this.next)的区别


class Link{// 链表的完成类
class Node{// 保存每一个节点,此处为了方便直接定义成内部类
private String data ;// 保存节点的内容
private Node next ;// 保存下一个节点
public Node(String data){
this.data = data ;// 通过构造方法设置节点内容
}
public void add(Node newNode){// 将节点加入到合适的位置
if(this.next==null){// 如果下一个节点为空,则把新节点设置在next的位置上
this.next = newNode ;
}else{// 如果不为空,则需要向下继续找next
add(this.next) ;
//this.next.add(newNode);
}
}
public void print(){
System.out.print(this.data + "\t") ;// 输出节点内容
if(this.next!=null){// 还有下一个元素,需要继续输出
this.next.print() ;// 下一个节点继续调用print
}
}
};
private Node root ;// 链表中必然存在一个根节点
public void addNode(String data){// 增加节点
Node newNode = new Node(data) ;// 定义新的节点
if(this.root==null){// 没有根节点
this.root = newNode ;// 将第一个节点设置成根节点
}else{// 不是根节点,放到最后一个节点之后
this.root.add(newNode) ;// 通过Node自动安排此节点放的位置
}
}
public void printNode(){// 输出全部的链表内容
if(this.root!=null){// 如果根元素不为空
this.root.print() ;// 调用Node类中的输出操作
}
}
};
public class LinkDemo022{
public static void main(String args[]){
Link l = new Link() ;
l.addNode("A") ;// 增加节点
l.addNode("B") ;// 增加节点
l.addNode("C") ;
l.printNode() ;
}
};

增加结点,正确的应该写成:this.next.add(newNode),我写成add(this.next),导致的问题:
增加两结点可以,如果增加3个或3个以上就进入死循环了,我不清楚这两个有啥区别,为啥就进入死循环了?
求高手给我从根源上剖析一下,谢谢
[解决办法]
不和lz谈语言,就和lz谈下阅读理解
                add(this.next) ;  //这个是把自己的后继结点加到自己的位置上
                this.next.add(newNode);  //这个是把newNode加到自己的后继节点的位置上
你说有啥区别?第一条语句连newNode都没了,你竟然敢说没区别~
[解决办法]
add时是需要加到一个后继指针为空的节点后,首先需要找到这个节点,再进行add。
public void add(Node newNode){        // 将节点加入到合适的位置             if(this.next==null){            // 如果下一个节点为空,则把新节点设置在next的位置上                 this.next = newNode ;             }else{        // 如果不为空,则需要向下继续找next                 add(this.next) ;                 //this.next.add(newNode);             }         } 

楼主的add(this.next)始终是在把next节点加在自己的上,并没有去找到一个为空的节点。所以会有错误。

热点排行