当前位置:   article > 正文

【力扣hot100】刷题笔记Day8

【力扣hot100】刷题笔记Day8

前言

  • 到了大章节【链表】了,争取两三天给它搞定!!

160. 相交链表 - 力扣(LeetCode)

  • 双指针

    • 参考题解,相比于求长度+右对齐再一起出发的方法简洁多了
      1. class Solution:
      2. def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> Optional[ListNode]:
      3. A, B = headA, headB
      4. while A != B:
      5. A = A.next if A else headB # A跑完就跳到B开始
      6. B = B.next if B else headA # B跑完就跳到A开始
      7. return A # 返回重合的节点或者返回空值

 206. 反转链表 - 力扣(LeetCode)

  • 双指针

      1. class Solution:
      2. def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
      3. pre, cur = None, head
      4. while cur:
      5. temp = cur.next # 暂存下一个节点
      6. cur.next = pre # 反转指针
      7. pre = cur # pre后移
      8. cur = temp # cur后移
      9. return pre # 最后cur是None,pre是最后的结点

234. 回文链表 - 力扣(LeetCode)

  • 快慢指针 + 翻转

    • 参考题解,复用上一题的翻转,注意一下奇偶以及最后要恢复链表
      1. class Solution:
      2. def isPalindrome(self, head: Optional[ListNode]) -> bool:
      3. # 翻转链表
      4. def reverse(head):
      5. pre, cur = None, head
      6. while cur:
      7. temp = cur.next
      8. cur.next = pre
      9. pre = cur
      10. cur = temp
      11. return pre
      12. # 快慢指针
      13. fast = slow = head
      14. while fast.next and fast.next.next:
      15. fast = fast.next.next
      16. slow = slow.next
      17. pre = slow # 存个pre断点方便恢复
      18. slow = slow.next # 后半截从中点的下一个节点开始
      19. left = head
      20. right = last = reverse(slow) # 存个last最后节点方便恢复
      21. while right: # 奇数right短一截,偶数right和left一样长
      22. if left.val != right.val:
      23. return False
      24. left = left.next
      25. right = right.next
      26. # 恢复链表
      27. pre.next = reverse(last)
      28. return True

后言

  • 工位刷题效率杠杠的!有双屏无论是编辑博文还是看题解都很舒服~ 链表真好玩呀(

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

闽ICP备14008679号