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.
题意:
只要是重复出现的数字,就都删掉,一个不留
思路:
use three pointers: pre, cur, post
post moves forward to check whether its value is the same with cur.val
if not, these three pointers moves forward together
if yes, post itself moves forward until its value is not same with cur.val
at this time, cur is at the start of the duplicate value, and post is after the end
then let pre.next=post
参考:
http://www.jianshu.com/p/bff0b0d48b72
Python:
# 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 head is None or head.next is None:
return head
dummy=ListNode(0)
dummy.next=head
pre=dummy
cur=head
post=head.next
while post:
while post and post.val != cur.val: # 没有重复的时候
post=post.next
cur=cur.next
pre=pre.next
while post and post.val==cur.val: # 有重复的时候
post=post.next
if post != cur.next: # 只有在有重复的时候这么做
pre.next=post
cur=post
if post is not None:
post=post.next
return dummy.next