Problem
Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.
Return the linked list sorted as well.
Algorithm
Use lists to save all the number and their appear times, then use the ones that only appeared once to build a new linked list.
Code
class Solution:
def deleteDuplicates(self, head: ListNode) -> ListNode:
if not head or not head.next:
return head
num = [head.val]
cnt = [1]
ind = 0
head = head.next
while head:
if head.val == num[ind]:
cnt[ind] += 1
else:
num.append(head.val)
cnt.append(1)
ind += 1
head = head.next
ans, p = None, None
for i in range(ind+1):
if cnt[i] == 1:
if ans == None:
p = ListNode(num[i])
ans = p
else:
p.next = ListNode(num[i])
p = p.next
return ans