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