当前位置:   article > 正文

Linked List leetcode题目总结 - 删除(python)leetcode 82 83_leecode可以把初始代码删除吗python

leecode可以把初始代码删除吗python

首先声明下我的题目顺序来源于LeetCode 总结 - 搞定 Linked List 面试题_Bruce_0712的博客-CSDN博客,感谢大佬的思路。

编程语言是python.

目录

- 83 Remove Duplicates from Sorted List

- 82 Remove Duplicates from Sorted List II

解读:

这道题目的需求是考验对于链表基本的删除操作,通过循环找到有重复的节点,进行删除操作即可。在参考不同解法的时候,我发现这里有个有趣的地方,有些解法是使用while loop对重复的数字进行更新,因为可能重复的数字可能有超过两个。而我偏向于下面这种,使用pre来表示和记录重复数字出现的第一次,cur代表后面的节点。

  1. class ListNode(object):
  2. def __init__(self, val=0):
  3. self.val = val
  4. self.next = None
  5. class Solution(object):
  6. def remove_duplicate(self, head: ListNode) -> ListNode:
  7. """
  8. """
  9. # base case
  10. if not head or not head.next: # 出现head是空的或者单个节点的直接返回
  11. return head
  12. pre, cur = head, head.next
  13. while cur: # 保障链表之中所有的节点都进行遍历
  14. if cur.val == pre.val: # 剪枝操作当出现重复的,进行节点的更新
  15. pre.next == cur.next
  16. cur = cur.next
  17. else:
  18. pre = pre.next
  19. cur = cur.next
  20. return head

 解读:这道题目和上一题相比,难度就小了不少,只不过需求从将每个数字都保存一次转变成将出现重复的数字时将该个数字进行删除操作。

  1. class ListNode(object):
  2. def __init___(self, val=0):
  3. self.val = val
  4. self.next = None
  5. class Solution(object):
  6. def __init__(self, head: ListNode) -> ListNode:
  7. """
  8. """
  9. if not head:
  10. return head
  11. dummy = ListNode(0)
  12. dummy.next = head
  13. pre, cur = dummy, head
  14. while cur:
  15. if cur.next.val == cur.val:
  16. while cur.next and cur.next.val == cur.val:
  17. cur = cur.next
  18. pre.next = cur.next # pre.next 指向不同的值
  19. else:
  20. pre = pre.next
  21. cur = cur.next # 对cur的更新,注意
  22. return dummy.next

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/117366
推荐阅读
相关标签
  

闽ICP备14008679号