美文网首页算法学习打卡计划
leetcode第八十三题——删除链表重复元素

leetcode第八十三题——删除链表重复元素

作者: 不分享的知识毫无意义 | 来源:发表于2020-01-27 17:19 被阅读0次

    从今天开始,先更新leetcode上与链表有关的题,从简入繁吧。
    这一题是一道简单类别的题目,多采用几种方法,主要是加强对于链表的理解。

    1.题目

    原题:

    给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。

    例子:

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

    2.解析

    这个题解法比较多,审题的关键在于这是一个排序的链表,因此不用考虑用一个额外的数组储存链表中已经出现元素的值。分三个思路来说吧。
    (1)链表直接操作,定义一个当前链表和一个next链表,每次计算二者值是否相同,如果相同可以直接赋予next值,如果不同则要跳过,最后为了避免链表结尾出现重复元素,需要再while循环后加一个cur.next=None,表示链表的结束。
    (2)也是链表直接操作,只不过这个不用定义pre链表,直接用next操作,原理上更好理解,实现起来也方便。
    (3)这种解法是新定义一个链表,再插入数据。这个就是新建一个head为0的空链表,然后不断插入数据,不同实现方式大同小异。唯独注意一点,head和head.next两个同时成立的时候,会忽略掉最后一个变量,需要特殊处理一下,就是将while中的head.next加入到if中。

    3.python代码

    #解法1
    class Solution:
        def deleteDuplicates(self, head):
            if not head:
                return None
            p = head
            pre = p
            cur = p.next
            while cur:
                if cur.val == pre.val:
                    cur = cur.next
                else:
                    pre.next = cur
                    cur = cur.next
                    pre = pre.next
            return head
    #解法2
    class solution:
        def deleteDuplicates(self, head):
            if not head:
                return None
            p = head
            cur = p
            while cur and cur.next:
                if cur.val == cur.next.val:
                    cur.next = cur.next.next
                else:
                    cur = cur.next
            return head
    #解法3
    class solution:
        def deleteDuplicates(self, head):
            if not head:
                return None
            new = ListNode(0)
            tmp = new
            while head:
                if head.next and head.val == head.next.val:
                    head = head.next
                else:
                    tmp.next = ListNode(head.val)
                    tmp = tmp.next
                    head = head.next
            return new.next
    

    相关文章

      网友评论

        本文标题:leetcode第八十三题——删除链表重复元素

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