2014-12-13 69 views
0

我正在阅读“破解编码访谈”,我注意到下面的代码用于Java中的链接列表实现。什么是链接列表中的头Java实现

class Node { 
    Node next = null; 
    int data; 

    public Node (int d){ 
     data = d; 
    } 

    void appendToTail(int d){ 
     Node end = new Node(d); 
     Node n = this; 
     while(n.next != null){ 
      n = n.next; 
     } 
     n.next = end; 
    } 
} 

该行Node n = this;非常困惑我。 我们应该从列表头开始,直到列表结尾。 java中的“this”通常指当前实例。 那么,这两者如何相关? 我敢肯定,我在这里失去了一些东西。请帮忙!

+0

这个确实指的是当前实例。 – Emz 2014-12-13 05:27:04

回答

1

无论何时,对于Node参考someNodesomeNode.appendToTail(x)被调用,它会创建一个新的Node与数据价值x,并将其追加到的任何列表包含someNode尾。如果someNode还不是列表的一部分,那么以后它将成为以新节点为尾的两个节点列表的首部。如果someNode是较长列表的一部分,则新节点将成为该列表的尾部。

要做到这一点,appendToTail必须找到尾注,其中一个带有nullnext指针。它自己开始搜索,使用this。如果是列表的尾部,则循环将被跳过,因为nextnull,而n.next = end;赋值将具有next = end;的效果。如果列表中有更多的节点,while循环会跳过它们直到找到当前尾部。

+0

你能向我解释为什么他们使用'this'?这是否意味着'this'暗示了'head'节点?这让我对CTCI解决方案感到困惑。 – theGreenCabbage 2016-03-12 19:40:22

+0

@theGreenCabbage appendToTail操作在连接到'this'的节点列表末尾添加一个数据为“d”的节点。然而,'this'本身可能是一个具有不同头部的列表中的后续节点。 – 2016-03-12 21:40:07