Loading

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

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

示例 1:

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

示例 2:

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

提示:

  • 链表中节点数目在范围 [0, 300] 内
  • -100 <= Node.val <= 100
  • 题目数据保证链表已经按升序排列

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解1 2021/9/11 O(n)

from collections import defaultdict
# Definition for singly-linked list.
class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next
    def __repr__(self):
        return '{}'.format(self.val)+ ('' if self.next==None else self.next.__repr__())

def deleteDuplicates(head: ListNode) -> ListNode:
    if head==None or head.next==None: return head
    dummy=ListNode(-1)
    d=defaultdict(int)
    tmp=head
    while tmp:
        d[tmp.val]+=1
        tmp=tmp.next
    tmp=dummy
    for x in d.keys():
        if d[x]==1:
            tmp.next=ListNode(x)
            tmp=tmp.next
    return dummy.next

if __name__ == '__main__':
    # [1,2,5]
    head = [1, 2, 3, 3, 4, 4, 5]
    head=ListNode(1,ListNode(2,ListNode(3,ListNode(3,ListNode(4,ListNode(4,ListNode(5)))))))
    print(deleteDuplicates(head))
    # [2,3]
    head = [1, 1, 1, 2, 3]
    head=ListNode(1,ListNode(1,ListNode(1,ListNode(2,ListNode(3)))))
    print(deleteDuplicates(head))
    head=ListNode(1)
    print(deleteDuplicates(head))
    head=None
    print(deleteDuplicates(head))
    head=ListNode(1,ListNode(1))
    print(deleteDuplicates(head))

posted @ 2021-09-11 09:08  wwcg2235  阅读(29)  评论(0)    收藏  举报