[英]Why can't I remove duplicates from linked list?
/*
DEFINITIONS
public class ListNode {
int val;
ListNode next;
public ListNode(int x){
val = x;
next = null;
}
}
public class LinkedList {
ListNode head;
}
*/
public void removeDups(){
ListNode head = this.head;
if(head == null) return;
HashSet<ListNode> set = new HashSet<>();
set.add(head);
while(head.next != null){
if(set.contains(head.next)){
head.next = head.next.next;
} else{
set.add(head.next);
head = head.next;
}
}
}
我應該從一個未排序的列表中刪除重復項,但是它在Java中不起作用。
1->2->4->9->9->4
應該返回1->2->4->9
但仍返回1->2->4->9->9->4
有什么問題 我清楚地將所有節點插入到哈希集中,並檢查它是否包含,但是不確定發生了什么?
您將在發布的代碼中刪除重復的節點,而不是重復的有價值的節點。
/*
DEFINITIONS
public class ListNode {
int val;
ListNode next;
public ListNode(int x){
val = x;
next = null;
}
}
public class LinkedList {
ListNode head;
}
*/
public void removeDups(){
ListNode head = this.head;
if(head == null) return;
HashSet<Integer> set = new HashSet<Integer>();
set.add(head.val);
while(head.next != null){
if(set.contains(head.next.val)){
head.next = head.next.next;
} else{
set.add(head.next.val);
head = head.next;
}
}
}
您正在嘗試檢查set
包含ListNode
,但沒有在ListNode
類中重寫equals
方法。 嘗試覆蓋它,或添加要設置的值而不是整個節點,因為值是簡單的整數,所以它將起作用。
您還應該覆蓋hashCode
方法,就像在覆蓋equals
時應該做的一樣-謝謝Andy Turner
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.