为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Beaten丶 2016-01-11 17:00:57
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个赞

//img1.sycdn.imooc.com//56937f7200017e5007290424.jpg

我调试了一下你的代码。你的代码的执行结构是这样的。

56937fe800017fad05000096.jpg

其中的next结构如下:

56937fe80001b4ab05000154.jpg

每个next中都有一个next结构。

if(this.next==null){	// 如果下一个节点为空,则把新节点设置在next的位置上
this.next = newNode ;
}else{	// 如果不为空,则需要向下继续找next
this.next.add(newNode) ;
}

所以this.next.add(newNode);就是说(这个还不好描述呢)next位置上的节点有数据,那么他就继续往下找next,然后把你传过来的数据,添加到一个新节点上。(这个新节点里面又有一个next,这大概就是单向链表的思想吧,猜测)。

查看完整回答
2 反对 回复 2016-01-11
?
任性的源代码

TA贡献2条经验 获得超0个赞

单向链表,简单讲其实就是 判断有没有根节点 没有就添加  有就一路next

this.next.add(newNode);  就是个递归调用  简单点讲就是如果有下一个元素 就循环添加下一个元素

这里的this跟楼上说的一样,就是当前节点的意思,也可以理解为下一个节点的上一个节点

this.next.print(); 同理

查看完整回答
反对 回复 2016-01-11
?
Its_forever

TA贡献361条经验 获得超328个赞

this关键字,谁调用它就代表谁,你的程序里面的this.next.add(newNode);this.next.print();中的this都是代表的l(Link l = new Link() )对象。

查看完整回答
反对 回复 2016-01-11
  • Beaten丶
    Beaten丶
    this.next.add(newNode);代表的意思是什么呢?
  • 3 回答
  • 1 关注
  • 1574 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信