牛客网-Python-删掉链表中重复的节点

题目描述

在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表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:
    def deleteDuplication(self, pHead):
        # write code here
        if pHead == None:
            return
        fast = pHead
        slow = ListNode(pHead.val-1)
        slow.next = fast
        
        while(fast!=None and fast.next!=None):
            if fast.val!=fast.next.val:
                slow = slow.next
                fast = fast.next
            else:
                while(fast != None and fast.next != None and fast.val==fast.next.val):
                    temp = fast.next
                    fast.next = temp.next
                    del temp
                temp = fast
                if fast==pHead:
                    pHead = fast.next
                    slow = fast
                slow.next = fast.next
                del temp
                fast = slow.next
        return pHead

 

posted @ 2020-02-07 19:36  ditingz  阅读(316)  评论(0编辑  收藏  举报