A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© jagon 中级黑马   /  2014-3-13 13:35  /  762 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*虽然链表已经学完了,可我心中总有些不舒服,因为有一个问题始终感觉特别难受,有时候好像能想通,有时候又想不通,谁能帮忙分析分析,看看能不能讲的更明白些!*/
class Node {
         private String data ;       // 假设要保存的数据类型是字符串
         private Node next ;
         public Node(String data) {
                   this.data = data ;
         }
         public String getData() {
                   return this.data ;
         }
         public void setNext(Node next) {
                   this.next = next ;
         }
         public Node getNext() {
                   return this.next ;
         }
         public void addNode(Node newNode) {  // 操作的是节点关系
                   if (this.next == null) {  // 当前节点的next属性指向为nullthis指代当前调用addNode()方法的Node对象,也即root节点对象
                            this.next = newNode ;  // 保存新节点,此处this代表当前调用addNode()方法的Node对象,即root节点对象
                   } else {
                            this.next.addNode(newNode) ;     //this.next指代当前对象,当前对象有调用addNode()方法,不是就进入递归了吗?这样还怎么往下传递?
                   }
         }
         public void printNode() {
                   System.out.println(this.data) ;
                   if (this.next != null) {   // 还有下一个节点
                            this.next.printNode() ;
                   }
         }
}
class Link {         // 处理节点关系
         private Node root ;        // 根节点对象
         public void add(String data) {         // 处理数据保存
                   if (data == null) {         // 没有数据
                            return ;       // 直接返回,不在往下处理
                   }
                   // 每一个数据如果要想保存在链表之中,必须将其封装为节点
                   // 这一操作的过程外部(用户)不需要知道
                   Node newNode = new Node(data) ;     //将传入的数据data封装成一个Node对象newNode
                   if (this.root == null) {   // 现在没有根节点,this指代本类属性
                            this.root = newNode ;   // 第一个作为根节点(将对象newNode的地址值赋给root)
                   } else {
                            this.root.addNode(newNode) ;  //this.root指代本类属性(也即root对象)
                   }
         }
         public void print() {
                   if (this.root != null) {    // 现在有根节点
                            this.root.printNode() ;   // Node类处理,this.root是一个Node对象,可以调用printNode方法
                   }
         }
}
public class TestDemo {
         public static void main(String args[]) {
                   Link all = new Link() ;
                   all.add("Hello") ;
                   all.add("World") ;
                   all.add("MLDN") ;
                   all.print() ;
         }
}

问题在中间部分:
  this.next.addNode(newNode) ;     //this.next指代当前对象,当前对象有调用addNode()方法,不是就进入递归了吗?这样还怎么往下传递?

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

1 个回复

倒序浏览
zengming13 发表于 2014-3-13 13:56
this.next.addNode(newNode) ;     //this.next指代当前对象,当前对象有调用addNode()方法,不是就进入递 ...

仔细想想,好像是明白了,可是绕几次就糊涂了,还是要多想,谢谢了!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马