#!/usr/bin/python# -*- coding: utf-8 -*-'''
Remove Duplicates from Sorted List II
Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.
For example,
Given 1->2->3->3->4->4->5, return 1->2->5.
Given 1->1->1->2->3, return 2->3.如果全是一样的返回None
'''# Definition for singly-linked list.classListNode(object):def__init__(self, x):
self.val = x
self.next = NoneclassSolution(object):defdeleteDuplicates(self, head):"""
:type head: ListNode
:rtype: ListNode
"""if head == Noneor head.next == None:
return head
flag = []
start = head
delete = None#记录上一个删除的数字while head != None:
if flag and head.val == flag[-1]:
delete = head.val
flag.pop()
else:
if head.val != delete:
flag.append(head.val)
head = head.next
ifnot flag:
returnNone
ret = start
cur = start
for i in flag:
start.val = i
cur = start
start = start.next
cur.next = Nonereturn ret
defdeleteDuplicates(self, head):'''更加简便的解法'''
dummy = pre = ListNode(0)
dummy.next = head
while head and head.next:
if head.val == head.next.val:
while head and head.next and head.val == head.next.val:
head = head.next
head = head.next
pre.next = head
else:
pre = pre.next
head = head.next
return dummy.next
if __name__ == "__main__":
s = Solution()
head = ListNode(2)
t = head
for i in [2,2,2,2,3,4]:
t.next = ListNode(i)
t = t.next
t.next = None
t = head
while t != None:
#print t.val
t = t.next
t = s.deleteDuplicates(head)
while t != None:
print t.val
t = t.next
77 leetcode - Remove Duplicates from Sorted List II
Remove Duplicates from Sorted List IIGiven a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.