什么是链表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"通常是指当前实例。那么,这两者有什么关系呢?我确定我在这里错过了一些东西。请帮忙!

每当调用

Node引用someNode时,someNode.appendToTail(x)都会创建一个数据值为x的新Node,并将其附加到包含someNode的任何列表的尾部。如果someNode还不是列表的一部分,则之后,它将是双节点列表的头部,新节点作为尾部。如果someNode是较长列表的一部分,则新节点将是该列表的尾部。

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

相关内容

  • 没有找到相关文章

最新更新