We can use a hash map cnt to count the occurrences of each element in the linked list and then traverse the list to remove elements that appear more than once.
classSolution {
public ListNode deleteDuplicatesUnsorted(ListNode head) {
Map<Integer, Integer> cnt =new HashMap<>();
for (ListNode cur = head; cur !=null; cur = cur.next) {
cnt.put(cur.val, cnt.getOrDefault(cur.val, 0) + 1);
}
ListNode dummy =new ListNode(0, head);
for (ListNode pre = dummy, cur = head; cur !=null; cur = cur.next) {
if (cnt.get(cur.val) > 1) {
pre.next= cur.next;
} else {
pre = cur;
}
}
return dummy.next;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
classSolution:
defdeleteDuplicatesUnsorted(self, head: ListNode) -> ListNode:
cnt = Counter()
cur = head
while cur:
cnt[cur.val] +=1 cur = cur.next
dummy = ListNode(0, head)
pre, cur = dummy, head
while cur:
if cnt[cur.val] >1:
pre.next = cur.next
else:
pre = cur
cur = cur.next
return dummy.next