美文网首页算法学习打卡计划
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