Remove Duplicates From Sorted List II

题目描述

删除排序列表中的重复元素2

给定一个按升序排列的链表,以及链表的头节点head,请删除链表中所有存在数字重复情况的节点,只保留原始链表中没有重复出现的数字。

返回结果同样升序排列。

示例

输入:head = [1,2,3,3,4,4,5]
输出:[1,2,5]

解法

节点的定义为:

type ListNode struct {
    Val int
    Next *ListNode
}

解法一:双指针

  • 时间复杂度:O(n)

  • 空间复杂度:O(1)

func deleteDuplicates(head *ListNode) *ListNode {
    dummy := &ListNode{}
    dummy.Next = head

    hair := dummy
    slow, fast := head, head
    for fast != nil {
        for fast.Next != nil && fast.Next.Val == fast.Val {
            fast = fast.Next
        }
        if fast == slow {
            hair.Next = slow
            hair = hair.Next
        }
        fast = fast.Next
        slow = fast
    }

    hair.Next = nil
    return dummy.Next
}

Last updated

Was this helpful?