劍指offer:刪除連結串列中重複的結點(Python)
阿新 • • 發佈:2019-02-10
題目描述
在一個排序的連結串列中,存在重複的結點,請刪除該連結串列中重複的結點,重複的結點不保留,返回連結串列頭指標。 例如,連結串列1->2->3->3->4->4->5 處理後為 1->2->5
解題思路
自己寫的程式碼太冗長,實在難看;牛客上找到的思路用Python實現的過程中,第一眼覺得挺簡單;後來越看越覺得好像其中連結串列的運用有些溜,反覆琢磨了好幾遍,難道是晚上思路卡頓了?
def deleteDuplication(self, pHead):
first = ListNode(-1)
first.next = pHead
last = first
while pHead and pHead.next:
if pHead.val == pHead.next.val:
val = pHead.val
while pHead and val==pHead.val:
pHead = pHead.next
last.next = pHead
else:
last = pHead
pHead = pHead.next
return first.next
包含測試版:
class Solution:
def deleteDuplication(self, pHead):
first = ListNode(-1)
first.next = pHead
last = first
while pHead and pHead.next:
if pHead.val == pHead.next.val:
val = pHead.val
while pHead and val==pHead.val:
pHead = pHead.next
last.next = pHead
else :
last = pHead
pHead = pHead.next
return first.next
def getNewChart(self, list):
if list:
node = ListNode(list.pop(0))
node.next = self.getNewChart(list)
return node
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
if __name__ == '__main__':
list = [1,1,1,2,3,3,4]
listNode = Solution().getNewChart(list)
head = Solution().deleteDuplication(listNode)
while head:
print(head.val, end=" ")
head = head.next