1. 程式人生 > >劍指offer:刪除連結串列中重複的結點(Python)

劍指offer:刪除連結串列中重複的結點(Python)

題目描述

在一個排序的連結串列中,存在重複的結點,請刪除該連結串列中重複的結點,重複的結點不保留,返回連結串列頭指標。 例如,連結串列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