leetcode_0082 删除排序链表中的重复元素 II

173 阅读1分钟

要求:

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

返回同样按升序排列的结果链表。

  • 示例 1

image.png

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

image.png

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

详解代码

# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def deleteDuplicates(self, head: ListNode) -> ListNode:
        if not head:
            return None
        
        result = ListNode(0)
        ans = result
        curr = head
        while curr:
            value = curr.val
            count = 0
            while curr and curr.val == value:
                curr = curr.next
                count += 1
            if count == 1:
                result.next = ListNode(value)
                result = result.next
        return ans.next

image.png 解题思路:我们使用ListNode(0)这种方式可以将我们的新元素添加生成一个新的链表,我们循环分成两层,第一层对所有原链表元素进行循环,第二个循环完成相同元素的计数,计数不超过1个就将其添加到我们的新链表上。