美文网首页
删除链表中重复的节点

删除链表中重复的节点

作者: Max_7 | 来源:发表于2018-12-25 15:44 被阅读0次

题目描述

在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5

思路

思路1: 简单粗暴。先遍历整个链表,把链表里的元素放进一个数组中,然后对数组进行过滤,只保留出现一次的元素。把筛选后的数组里的元素重新构建成链表。
思路2: 递归。当当前的节点与下一个点相同时,一直向后找,找到不同的点,返回。当 当前的节点与下一个点不同时,判断对后一个点递归判断。当检测到尾部时,返回尾部。

代码

常规

def deleteDuplication(self, pHead):
        node_list = []
        while pHead is not None:
            node_list.append(pHead.val)
            pHead = pHead.next
        clean_node_list = list(filter(lambda x:node_list.count(x)==1,node_list)) #过滤重复node
        fake_node = ListNode(0)  #辅助node
        pre = fake_node
        for i in range(len(clean_node_list)):
            temp_node = ListNode(clean_node_list[i])
            pre.next = temp_node
            pre = temp_node
        return fake_node.next

递归

def deleteDuplication(self, pHead):
        if pHead is None:
            return pHead #如果是空结点
        if pHead.next is None:
            return pHead #递归的尽头
        if pHead.val == pHead.next.val:
            #当前点与下一个点相同
            #一直向后找,直到找到不同的点
            temp_node = pHead.next
            while temp_node is not None and temp_node.val == pHead.val :
                #注意判断顺序,要先判断非空,再判断value
                temp_node = temp_node.next
            return self.deleteDuplication(temp_node) 
        else:
            #pHead.val != pHead.next.val
            pHead.next = self.deleteDuplication(pHead.next)
            #当前点与下一个点不等,但不确定下一个点与它后面的点不等
            return pHead

相关文章

  • 删除链表中重复的节点

    删除链表中重复的节点在一个排序的链表中,如何删除重复的节点?

  • 18-删除链表节点、删除链表重复节点

    1. 删除链表节点 2. 删除链表中的重复节点 给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没...

  • Leetcode总结 -- 链表

    目录 链表的基本操作 改/遍历:while(?) 查: 返回倒数K个节点 增/删除:反转链表,删除链表中的重复节点...

  • 2019-02-19

    java删除链表中重复的节点(保留一个节点)

  • 删除链表中重复的节点

    《剑指offer》面试题18:题目二:删除链表中重复的节点。 题目:在一个排序的链表中,如何删除重复的节点?例如,...

  • Day 2 删除无序链表中的重复节点

    算法 Day2 删除无序链表中的重复节点,保留一个 给定一个无序单向链表的头节点,删除内部的重复节点,使其内部节点...

  • LeetCode 82. 删除排序链表中的重复元素 II

    82. 删除排序链表中的重复元素 II 给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出...

  • 82. 删除排序链表中的重复元素 II

    82. 删除排序链表中的重复元素 II 给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出...

  • leetCode进阶算法题+解析(十二)

    删除排序链表中的重复元素2 题目:给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的...

  • 删除链表中的重复节点

    题目:在一个排序的链表中,如何删除重复的节点? 思路:删除重复节点同样要考虑边界值的问题,头节点为重复,尾节点为重...

网友评论

      本文标题:删除链表中重复的节点

      本文链接:https://www.haomeiwen.com/subject/ajdflqtx.html