【LEETCODE】82- Remove Duplicates from Sorted List II [Python]

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
                
                
                


你可能感兴趣的:(LeetCode,python)