美文网首页算法学习打卡计划
leetcode第八十二题—删除排序链表中的重复元素 II

leetcode第八十二题—删除排序链表中的重复元素 II

作者: 不分享的知识毫无意义 | 来源:发表于2020-04-20 11:55 被阅读0次

    这道题跟删除链表重复元素相比有了一个升级,就是只要是重复的元素一个也不要,要是列表的话,还记得python里的Counter吧,对就是那个做文本分类最常用的,用这个就好了,要不然就用字典计数,很简单的。但是链表嘛,有他自己的特性。

    1.题目

    原题

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

    例子

    输入: 1->2->3->3->4->4->5
    输出: 1->2->5

    2.解析

    这道题的本质还是链表的循环。有几个小points。

    • 新链表输出删除后的结果,新链表指定头部节点以后,让他连上原链表,这是为了保留头部元素,可以很方便的在原链表的基础上进行操作。
    • 判断值是否相同,如果出现了一个新值,那么就循环链表,直到这个值消失,因为更新了next所以更改链表的指向就好了。
    • 链表赋值后不要随便更改了,比如p=cur,cur=cur.next,那么p也是跟着改变的,注意一下先后顺序。

    3.python代码

    class Solution:
        def deleteDuplicates(self, head):
            if head is None or head.next is None:
                return head
            # pre = head
            tmp = ListNode(0)
            new = tmp
            new.next = head
            cur = head
    
            # list_duplucate = []
            while cur and cur.next:
                if cur.val == cur.next.val:
                    val = cur.val
                    while cur and cur.val == val:
                        cur = cur.next
                    new.next = cur
                    # cur.next = cur.next.next
                    # cur = cur.next
                    # new.next = cur
                else:
                    new = new.next
                    cur = cur.next
                    #在对cur进行操作会对new造成影响
                    #只要不对new进行赋值就不必整两个变量出来
            return tmp.next
    

    相关文章

      网友评论

        本文标题:leetcode第八十二题—删除排序链表中的重复元素 II

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