难度中等547收藏分享切换为英文接收动态反馈
存在一个按升序排列的链表,给你这个链表的头节点 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
- 题目数据保证链表已经按升序排列
思路:
1.字典存储,
2.先删除head之后的)
3.单独判断头是否需要删除,需要的话,return head.next if head.val in dict.values else head
# Definition for singly-linked list.
# 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 head
dict1 = {}
start = head
while(start):
if dict1.get(start.val):
dict1[start.val] = dict1.get(start.val) + 1
else:
dict1[start.val] = 1
start = start.next
start2 = head
# while(start2):
# if dict1[start2.val] >= 2:
# if start2.next:
# start2.val = start2.next.val
# start2.next = start2.next.next
# else:
# start2 = None
# else: start2 = start2.next
while(start2.next):
if dict1[start2.next.val] >= 2:
start2.next = start2.next.next
else: start2 = start2.next
if dict1[head.val]!=1:
return head.next
return head