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();是什么意思啊?
3 回答
已采纳
Its_forever
TA贡献361条经验 获得超328个赞
我调试了一下你的代码。你的代码的执行结构是这样的。
其中的next结构如下:
每个next中都有一个next结构。
if(this.next==null){ // 如果下一个节点为空,则把新节点设置在next的位置上 this.next = newNode ; }else{ // 如果不为空,则需要向下继续找next this.next.add(newNode) ; }
所以this.next.add(newNode);就是说(这个还不好描述呢)next位置上的节点有数据,那么他就继续往下找next,然后把你传过来的数据,添加到一个新节点上。(这个新节点里面又有一个next,这大概就是单向链表的思想吧,猜测)。
任性的源代码
TA贡献2条经验 获得超0个赞
单向链表,简单讲其实就是 判断有没有根节点 没有就添加 有就一路next
this.next.add(newNode); 就是个递归调用 简单点讲就是如果有下一个元素 就循环添加下一个元素
这里的this跟楼上说的一样,就是当前节点的意思,也可以理解为下一个节点的上一个节点
this.next.print(); 同理
Its_forever
TA贡献361条经验 获得超328个赞
this关键字,谁调用它就代表谁,你的程序里面的this.next.add(newNode);this.next.print();中的this都是代表的l(Link l = new Link() )对象。
添加回答
举报
0/150
提交
取消