83. Remove Duplicates from Sorted List

83. Remove Duplicates from Sorted List

這個題目是快慢指針的題目,慢指針指向的是當前答案的最後一個節點,如果此時快指針指向的節點的值和慢指針指向節點的值相同的時候,代表還有重複值的節點,繼續移動快指針,直到看到一個新的值為止。

最後要記得的是慢指針要收尾,因為有可能最後所有的節點的數值都一樣,快指針就走完了,慢指針的下一個節點要指向空指針。

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def deleteDuplicates(self, head: Optional[ListNode]) -> Optional[ListNode]:
        if not head:
            return head
        slow = head
        fast = head

        while fast:
            if fast.val != slow.val:
                slow.next = fast
                slow = slow.next
            fast = fast.next

        slow.next = None
        return head

時間複雜度為 O(n)

空間複雜度為 O(1) 我們並不需要額外建立記憶體空間來儲存值。