Leetcode - 83. 删除排序链表中的重复元素
存在一个按升序排列的链表,给你这个链表的头节点
head,请你删除所有重复的元素,使每个元素只出现一次。
返回同样按升序排列的结果链表。
示例 1:

输入:head = [1,1,2]
输出:[1,2]
示例 2:

输入:head = [1,1,2,3,3]
输出:[1,2,3]
提示:
- 链表中节点数目在范围 [0, 300] 内
- -100 <= Node.val <= 100
- 题目数据保证链表已经按升序排列
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解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():
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))


浙公网安备 33010602011771号