82 - 删除排序链表中的重复元素 II - python

41 阅读1分钟

给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中没有重复出现的数字

示例 1:

输入: 1->2->3->3->4->4->5
输出: 1->2->5

示例 2:

输入: 1->1->1->2->3
输出: 2->3

这道题和83题相同之处在于,都是给一个排序链表。要求删除链表中重复的元素;不同之处在于,83题要求重复的元素只出现一次,而该题则要求如果元素有重复则全部删除。

  • 首先新建结点拼接到链表头部,设置指针p指向新结点,cur指向head

  • 判断cur.valcur.next.val的关系:

    • 如果 cur.val == cur.next.val,则执行cur = cur.next,直到cur指向的元素不等于当前元素
    • 如果 cur.val != cur.next.val,则执行cur = cur.next, p = p.next,继续往后判断,直到cur.next == None

在这里插入图片描述

AC code

class Solution:
    def deleteDuplicates(self, head: ListNode) -> ListNode:
        newhead = ListNode(-1)
        p = newhead
        p.next = head
        cur = head
        while cur and cur.next:
            if cur.val != cur.next.val:
                p = p.next
                cur = cur.next
            else:
                val = cur.val
                while cur and cur.val == val:
                    cur = cur.next
                p.next = cur
        return newhead.next