題目連結
https://leetcode.com/problems/remove-duplicates-from-sorted-list/ 題目原文
Given a sorted linked list, delete all duplicates such that each element appear only once.
For example,
Given 1->1->2, return 1->2.
Given 1->1->2->3->3, return 1->2->3. 題目翻譯
給定一個有序鏈表,重複資料刪除元素使每個元素之出現一次。 思路方法 思路一
遍曆所有節點,對於每個節點,檢查其後的一個節點是否與當前節點值相同,若相同則刪除後面的節點。迴圈下去。
代碼
# Definition for singly-linked list.# class ListNode(object):# def __init__(self, x):# self.val = x# self.next = Noneclass Solution(object): def deleteDuplicates(self, head): """ :type head: ListNode :rtype: ListNode """ p = head while p: if p.next and p.next.val == p.val: p.next = p.next.next else: p = p.next return head
思路二
遍曆所有節點,對於每個節點,從後一個節點開始一個個檢查是否與當前節點值相同,直到找到一個後面的節點其值與當前節點不同,刪除中間的所有與當前節點值相同的節點。迴圈下去。
代碼
# Definition for singly-linked list.# class ListNode(object):# def __init__(self, x):# self.val = x# self.next = Noneclass Solution(object): def deleteDuplicates(self, head): """ :type head: ListNode :rtype: ListNode """ p = q = head while p: while q and q.val == p.val: q = q.next p.next = q p = q return head
思路三
遞迴實現,本質上是從後向前檢查是否有相同的節點。
代碼
# Definition for singly-linked list.# class ListNode(object):# def __init__(self, x):# self.val = x# self.next = Noneclass Solution(object): def deleteDuplicates(self, head): """ :type head: ListNode :rtype: ListNode """ if not head or not head.next: return head head.next = self.deleteDuplicates(head.next) return head if head.val != head.next.val else head.next
PS: 新手刷LeetCode,新手寫部落格,寫錯了或者寫的不清楚還請幫忙指出,謝謝。
轉載請註明:http://blog.csdn.net/coder_orz/article/details/51506143