25_LeetCode 82&83. Remove Duplicates from Sorted List(II) (Python詳解及實現)

【題目】83

Given a sorted linked list, delete allduplicates such that each element appear only once.

 

For example,

Given 1->1->2, return 1->2.

Given 1->1->2->3->3, return1->2->3.

 

給定一個有序鏈表,刪除重複元素,每個元素只允許出現一次

 

【思路】

82題是83題的升級版,做82題前防先看下83題

設立虛表頭pummy 這樣處理Linked List方便一些

p.next始終指向待比較的元素, 如果遇到了重複元素:p不動,p.next變化;如果沒有遇到重複元素,則p=p.next

【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

       

       prev = ListNode(0)#創建一個結點

       prev = head

       p = head.next

       

       while p:           

           if p.val == prev.val:#如果前一個結點值與後一個相等

                prev.next = p.next#前一個結點指向p的下一個結點

                p = p.next#

           else:

                prev = p

                p = p.next

       return head

 

 

if __name__ == '__main__':

     nums= [3, 1]

    target = 1

    S = Solution1()

    S.search(nums,target)

 

 

下面看82題:83題的升級版

Given a sorted linked list, delete allnodes that have duplicate numbers, leaving only distinct numbers from theoriginal list.

 

For example,

Given1->2->3->3->4->4->5, return 1->2->5.

Given 1->1->1->2->3, return2->3.

 

給你定一個排好序的鏈表,將所有重複的節點去掉。比如:給出1->2->3->3->4->4->5, 返回1->2->5.

判斷是重複的結點就直接移到下一位。

 

# 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

       p = dummy

       tmp = dummy.next#要判斷的第一個數據,也就是head數據

       while p.next:

           while tmp.next and tmp.next.val == p.next.val:

                tmp = tmp.next#tmp下移判斷是否仍相等

           if tmp == p.next:

                p = p.next

                tmp = p.next

           else:#刪除重複點

                p.next = tmp.next

       return dummy.next

                

發佈了50 篇原創文章 · 獲贊 14 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章