劍指offer——在一個排序的連結串列中,存在重複的結點,請刪除該連結串列中重複的結點, # 重複的結點不保留,返回連結串列頭指標。
阿新 • • 發佈:2019-01-23
# 在一個排序的連結串列中,存在重複的結點,請刪除該連結串列中重複的結點, # 重複的結點不保留,返回連結串列頭指標。 例如,連結串列1->2->3->3->4->4->5 處理後為 1->2->5 # -*- coding:utf-8 -*- class ListNode: def __init__(self, x): self.val = x self.next = None class Solution: # 需要注意的是,最後一個節點,它的next為空,因此最後的重複節點集合為None,上一個節點(不重複)加入了nodes,不重複直接刪掉 def deleteDuplication(self, pHead): node_list = [] #儲存相同的節點 nodes = [] #儲存不重複的節點 p = pHead node_list = [p] while p != None: p1 = p.next if p1 != None and p1.val == p.val: node_list.append(p1) # 當前後節點相等,將後一個節點新增到重複節點集合中 if p1 == None or p1.val != p.val: if len(node_list) == 1: nodes.append(p) # 當前前後節點不同,看看前一個節點的重複節點集合中有幾個元素,如果只有一個,認為前一個節點為有效節點 node_list = [p1] #將後一個節點作為重複節點集合的初始值 p = p1 if len(nodes) == 0: return None nodes.append(None) for k in range(len(nodes)-1): nodes[k].next = nodes[k+1] return nodes[0] a1=ListNode(1) a2=ListNode(2) a3=ListNode(3) a4=ListNode(4) a5=ListNode(5) a1.next=a2 a2.next=a3 a3.next=a4 a4.next=a5 S = Solution() S.deleteDuplication(a1)