我正在阅读"破解编码面试"我注意到下面的代码用于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中通常是指当前实例。 那么,这两者有什么关系呢? 我确定我在这里遗漏了一些东西。请帮忙!
答案 0 :(得分:1)
每当Node
引用someNode
,someNode.appendToTail(x)
被调用时,它都会创建一个数据值为Node
的新x
,并将其附加到任何列表的尾部都包含someNode
。如果someNode
不是列表的一部分,那么它将成为双节点列表的头部,新节点为尾部。如果someNode
是较长列表的一部分,则新节点将成为该列表的尾部。
为此,appendToTail
必须找到尾注,即null
next
指针。它使用this
自行开始搜索。如果它是其列表的尾部,则将跳过循环,因为next
为null
,n.next = end;
赋值将具有next = end;
的效果。如果列表中有更多节点,则while循环将跳过它们,直到找到当前尾部。