剑指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

猜你喜欢

转载自blog.csdn.net/u010005281/article/details/80232730