引用Java链表中的节点

时间:2016-10-22 04:20:55

标签: java data-structures linked-list

我需要一些帮助来理解方法的工作原理。

我有一个基本的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;
}

我对变量previousn感到困惑。当我们设置previous = n;时,是不是让它们引用同一个对象?如果他们引用同一个对象,则您对n所做的一项更改将在previous中相同。那么行previous.next = n.next;如何运作?

谢谢!

1 个答案:

答案 0 :(得分:4)

一起阅读这两行,

previous = n;  
n = n.next;

因此,一旦处理了一个节点,就会向前移动previous和n的指针。 n是之前的下一个节点,因此previous设置为n,n移动到下一个节点,即n.next

对于删除部分,希望下图有帮助

W3C