動機

用prev代表重複開始前的node 也看一下,83作對比

Problem

Given the head of 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.

 

Example 1:

Input: head = [1,2,3,3,4,4,5]Output: [1,2,5]

Example 2:

Input: head = [1,1,1,2,3]Output: [2,3]

 

Constraints:

  • The number of nodes in the list is in the range [0, 300].
  • -100 <= Node.val <= 100
  • The list is guaranteed to be sorted in ascending order.

Sol

把有重複的node當成一整群去刪,這樣當重複出現在開頭會很好處理

class Solution:
    def deleteDuplicates(self, head: ListNode) -> ListNode:
        prev, now, ret = [None, head, head]
        while now:
            if now.next and now.val == now.next.val:
                val = now.val
                while now and val == now.val:
                    now = now.next
                if prev:
                    prev.next = now
                else:
                    ret = now
            else:
                prev, now = [now, now.next]
        return ret