猿问

求解,关于单向链表的问题。

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

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 LinkDemo02{

public static void main(String args[]){

Link l = new Link() ;

l.addNode("A") ; // 增加节点

l.addNode("B") ; // 增加节点

l.addNode("C") ; // 增加节点

l.addNode("D") ; // 增加节点

l.addNode("E") ; // 增加节点

System.out.println("======= 删除之前 ========") ;

l.printNode() ;

}

};

代码中的  this.next.add(newNode);this.next.print();是什么意思啊?

Beaten丶
浏览 1575回答 3
3回答

Its_forever

我调试了一下你的代码。你的代码的执行结构是这样的。其中的next结构如下:每个next中都有一个next结构。if(this.next==null){ // 如果下一个节点为空,则把新节点设置在next的位置上 this.next = newNode ; }else{ // 如果不为空,则需要向下继续找next this.next.add(newNode) ; }所以this.next.add(newNode);就是说(这个还不好描述呢)next位置上的节点有数据,那么他就继续往下找next,然后把你传过来的数据,添加到一个新节点上。(这个新节点里面又有一个next,这大概就是单向链表的思想吧,猜测)。

任性的源代码

单向链表,简单讲其实就是 判断有没有根节点 没有就添加  有就一路nextthis.next.add(newNode);  就是个递归调用  简单点讲就是如果有下一个元素 就循环添加下一个元素这里的this跟楼上说的一样,就是当前节点的意思,也可以理解为下一个节点的上一个节点this.next.print(); 同理

Its_forever

this关键字,谁调用它就代表谁,你的程序里面的this.next.add(newNode);this.next.print();中的this都是代表的l(Link l = new Link() )对象。
随时随地看视频慕课网APP

相关分类

Java
我要回答