Description
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.
给定一个有序的链表,删除所有有重复数字的节点,只保留原始列表中唯一的数字。
例如:
给定 1->2->3->3->4->4->5 ,则返回 1->2->5
给定 1->1->1->2->3 ,则返回 2->3
Solution
本题使用双指针,pre 和 cur, pre指向表头。只有当pre的指向与cur的指向不同时,pre才移动到cur的指向,碰到重复的项目,则cur移动一位,直到两个指针指向不同。注意当pre.next == cur
的情况。
# -*- coding: utf-8 -*-
"""
Created on Sun Mar 18 10:10:07 2018
@author: Saul
"""
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def deleteDuplicates(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
if head == None or head.next == None:
return head
dummy = ListNode(0)
dummy.next = head
pre = dummy
cur = head
while cur:
while cur.next and pre.next.val == cur.next.val:
cur = cur.next
if pre.next == cur: # think about this
pre = pre.next
else:
pre.next = cur.next # and this
cur = cur.next
return dummy.next