82. Remove Duplicates from Sorted List II (Medium)
Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.
Example 1:
Input: 1->2->3->3->4->4->5 Output: 1->2->5Example 2:
Input: 1->1->1->2->3 Output: 2->3
1 dict统计出现次数
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def deleteDuplicates(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
if not head or not head.next:return head
node = head
dic = {}
while(node):
dic[node.val] = dic.get(node.val,0) + 1
node = node.next
pre = newhead = ListNode(0)
newhead.next = head
while(head):
if dic[head.val] > 1:
pre.next = head.next
else:
pre = head
head = head.next
return newhead.next
2 遍历时修改
用一个sameval 记录有和next的值相同的 结点
class Solution(object):
def deleteDuplicates(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
if not head or not head.next:return head
pre = newhead = ListNode(0)
sameval = None
while(head):
if head.next:
if head.val == head.next.val:
sameval = head
else:
if not sameval: # not duplicate
pre.next = head
pre = pre.next
sameval = None
head = head.next
else:#lastone
if not sameval:
pre.next = head
else:pre.next=None
break
return newhead.next