Java 使用链表的哈希集删除重复项,我可以';我不理解代码的工作流程

Java 使用链表的哈希集删除重复项,我可以';我不理解代码的工作流程,java,hash,linked-list,duplicates,singly-linked-list,Java,Hash,Linked List,Duplicates,Singly Linked List,问题是从未排序的链表中删除重复项。使用散列集可以跟踪集中已有的值 我不明白if,else块在做什么。 尤其是代码,prev=当前 这会覆盖以前的版本吗 我在白板上画了多个图表,无法理解这段代码的流程 public void removeDuplicateFromUnsortedList() { HashSet<Integer> hs = new HashSet<Integer>(); Node current = head; Node prev

问题是从未排序的链表中删除重复项。使用散列集可以跟踪集中已有的值

我不明白if,else块在做什么。 尤其是代码,prev=当前

这会覆盖以前的版本吗

我在白板上画了多个图表,无法理解这段代码的流程

public void removeDuplicateFromUnsortedList() {
    HashSet<Integer> hs = new HashSet<Integer>();

    Node current = head;
    Node prev = null;

    while(current != null) {

        int current_data = current.data;

        if(hs.contains(current_data)) {
            prev.next = current.next;
        }
        else {
            hs.add(current_data);
            prev = current;
        }

        current = current.next;

    }
}
public void removeDuplicateFromUnsortedList(){
HashSet hs=新的HashSet();
节点电流=头;
Node prev=null;
while(当前!=null){
int current_data=current.data;
if(hs.包含(当前_数据)){
prev.next=当前.next;
}
否则{
hs.添加(当前_数据);
prev=当前值;
}
当前=当前。下一步;
}
}
这是理想的结果,它是有效的

打印: 1-->1-->4-->2-->4-->2-->2-->空

打印:
1-->4-->2-->null

对于第一个节点,prev和current都将从第二次迭代中将其指向while循环的末尾-由于哈希集包含数据,prev.next将保留current.next,其中current是第二个元素,因此第二个“1”将从列表中删除。你可能不习惯链表的赋值语句,买本书,看看一些图形化的例子。在花费了不合理的时间,解决了这个代码之后,我终于明白了。你的解释正好证明了这一点。基本上,prev和current,因为“prev=current”在同一个链表上工作。我以为它是完全分开的!现在记住这一点,当prev.next=current.next时,它将跳过复制的节点。是否正确,请给出反馈:)对于第一个节点,prev和current都将指向while循环的末尾,从第二次迭代开始-由于hashSet包含数据,prev.next将保留current.next,其中current是第二个元素,因此第二个“1”将从列表中删除。你可能不习惯链表的赋值语句,买本书,看看一些图形化的例子。在花费了不合理的时间,解决了这个代码之后,我终于明白了。你的解释正好证明了这一点。基本上,prev和current,因为“prev=current”在同一个链表上工作。我以为它是完全分开的!现在记住这一点,当prev.next=current.next时,它将跳过复制的节点。是否正确,请给出反馈:)