当前位置:   article > 正文

LeetCode:160(Python)—— 相交链表(简单)_相交链表 python

相交链表 python

相交链表

概述:给你两个单链表的头节点 headA headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null

  1. 输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,6,1,8,4,5], skipA = 2, skipB = 3
  2. 输出:Intersected at '8'
  3. 输入:intersectVal = 2, listA = [1,9,1,2,4], listB = [3,2,4], skipA = 3, skipB = 1
  4. 输出:Intersected at '2'
  5. 输入:intersectVal = 0, listA = [2,6,4], listB = [1,5], skipA = 3, skipB = 2
  6. 输出:null

方法一:双指针

思路:只有当链表 headAheadB 都不为空时,两个链表才可能相交。因此首先判断链表 headA headB 是否为空,如果其中至少有一个链表为空,则两个链表一定不相交,返回 null。当链表 headA headB 都不为空时,创建两个指针 A B,初始时分别指向两个链表的头节点 headA headB,然后将两个指针依次遍历两个链表的每个节点。

  1. # 双指针
  2. class Solution:
  3. def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> Optional[ListNode]:
  4. A = headA
  5. B = headB
  6. while A and B:
  7. if A == B:
  8. return A
  9. A = A.next
  10. B = B.next
  11. if A is None and B is None:
  12. return None
  13. if A is None:
  14. A = headB
  15. if A is None:
  16. B = headA
  17. # 另外一种写法
  18. class Solution:
  19. def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> Optional[ListNode]:
  20. A, B = headA, headB
  21. while A != B:
  22. A = A.next if A else headB
  23. B = B.next if B else headA
  24. return A

总结

错的人就算走过了对方的路也还是会错过,这题我希望大家都返回 True !

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

闽ICP备14008679号