我正在阅读"破解编码访谈",我注意到下面的代码用于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
从自身开始搜索。如果是其列表的尾部,则循环将被跳过,因为next
是null
,并且n.next = end;
赋值将具有next = end;
的效果。如果列表中有更多节点,while 循环将跳过它们,直到找到当前尾部。