/*虽然链表已经学完了,可我心中总有些不舒服,因为有一个问题始终感觉特别难受,有时候好像能想通,有时候又想不通,谁能帮忙分析分析,看看能不能讲的更明白些!*/ 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属性指向为null,this指代当前调用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()方法,不是就进入递归了吗?这样还怎么往下传递?
|