当前位置: 代码迷 >> J2SE >> 书上题例看不懂,Java this关键字跟链表
  详细解决方案

书上题例看不懂,Java this关键字跟链表

热度:26   发布时间:2016-04-23 20:00:57.0
书上题例看不懂,Java this关键字和链表
Java,this和节点的问题。节点的连接,例题是用this.next为空则连接新节点的。

this书上说表示当前对象(也就是Root)。岂不是这一题,创建root节点和第二个节点后就不能再连接第三个节点了?

因为this.next(root.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){ //this表示当前调用对象 如果下一个节点为空,则把新节点设置在next的位置上
this.next = newNode ;
}else{ // 如果不为空,则需要向下继续找next
this.next.add(newNode) ;
}
}

};
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 class LinkDemo02{
public static void main(String args[]){
Link l = new Link() ;
l.addNode("A") ; // 增加节点
l.addNode("B") ; // 增加节点
l.addNode("C") ; // 增加节点
l.addNode("D") ; // 增加节点

}
};

------解决思路----------------------
方法(函数)的递归调用。如果this.next不为空,那么调用this.next.add(newNode),此时进入到该方法中后,这时的this已经是上一次调用的this.next了。实际上就是链表的指针(当然Java里面没有指针这个概念,只是形象的类比)在向后移动,直到移动到链尾(即this.next为空)才添加新节点。
  相关解决方案