LeetCode83- 删除排序链表中的重复元素

最近突然有些喜欢制作干花标本了

觉得能以另外一种方式将短暂的生命长久的保存住

还是挺神奇的

虽然手段有些残忍哈

发两张样本给大家瞧瞧

 

准备再从网上买些塑料薄片将这些花给固定住

这样就可以保存更长时间了


83- 删除排序链表中的重复元素

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

示例 1:

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

示例 2:

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

思路:

本题还是相对简单的,对于链表问题,我始终喜欢先将链表上每个节点的值保存到一数组中,我们再根据题目的要求对该数组进行处理操作。因为数组有很多相关的内置函数可以使用,所以我们对数组操作也相对简单。本题亦是如此,首先采用的是双指针法。定义左右指针,左指针用来记录最终链表的连接关系;右指针用来记录给定head链表的移动关系。只要有相同元素出现,则右指针右移,而左指针不动;如果连续的两个元素不相等,则左右指针均要移动。

代码如下:

class Solution(object):
    # 本题采用的是双指针法。定义左右指针,左指针用来记录最终链表的连接关系;右指针用来记录给定head链表的移动关系
    # 只要有相同元素出现,则右指针右移,而左指针不动;如果连续的两个元素不相等,则左右指针均要移动
    def deleteDuplicates(self, head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
        if head is None:
            return head
        # 定义dummy指针指定最终要返回的链表
        dummy = ListNode(0)
        # 指定head做dummy链表的右指针
        dummy.next = head
        # 指定dummy_copy做dummy链表的左指针
        dummy_copy = dummy
        # 指定last_num用来保存head链表最后一个节点的值
        last_num = 0
        while head:
            if head.next and head.val != head.next.val:
                dummy_copy.next = ListNode(head.val)
                dummy_copy = dummy_copy.next
            if head.next is None:
                last_num = head.val
            head = head.next
        # 最后别忘了将head链表最后一个节点的值赋值给dummy_copy链表
        dummy_copy.next = ListNode(last_num)
        return dummy.next


if __name__ == "__main__":
    head_list = [2]
    head = ListNode(0)
    head_copy = head
    for index in head_list:
        head_copy.next = ListNode(index)
        head_copy = head_copy.next
    new_head = Solution().deleteDuplicates(head.next)
    print(new_head)

不过执行效率比较差,在10%左右。各位读者要是有更好的方法还请多多分享啊!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学习的学习者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值