我需要一些帮助来理解方法的工作原理。
我有一个基本的Node
类定义如下:
class Node {
Node next = null;
int data;
public Node(int d){
data = d;
}
}
现在我正在研究这种deleteDuplicates
方法是如何工作的。我知道我们正在迭代地遍历每个节点并将其值存储在一个集合中。如果该值已经在集合中,我相信我们正在设置前一节点的next
指针以跳过当前节点。这是方法:
public static Node deleteDuplicates(Node head){
Node n = head;
HashSet<Integer> set = new HashSet<Integer>();
Node previous = null;
while(n != null) {
if (set.contains(n.data)){
// skip this node
previous.next = n.next;
}
else {
set.add(n.data);
previous = n;
}
n = n.next;
}
return head;
}
我对变量previous
和n
感到困惑。当我们设置previous = n;
时,是不是让它们引用同一个对象?如果他们引用同一个对象,则您对n
所做的一项更改将在previous
中相同。那么行previous.next = n.next;
如何运作?
谢谢!
答案 0 :(得分:4)
一起阅读这两行,
previous = n;
n = n.next;
因此,一旦处理了一个节点,就会向前移动previous和n的指针。 n是之前的下一个节点,因此previous设置为n,n移动到下一个节点,即n.next
对于删除部分,希望下图有帮助