剑指offer52:两个链表的第一个公共节点 python
题目描述解法
题目描述
解法
该题思考的是,如果一个指针把这首先走一遍链表A再走一遍链表B,另一个指针首先走一遍链表B再走一遍链表A,如果两个指针同时出发,那么他们一定会在两个链表相接处相遇(因为两个指针都走了M+N步,其中M是链表A的总长度,N是链表B单独的那部分的长度(不包含两者相接的部分))。
这时候如果没看明白的话,可以自己在纸上画一下~~
那如果两个链表根本不相交呢?那我们可以认为他们是在null节点相交的呀~
代码如下:
class Solution:
def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode:
node1 = headA
node2 = headB
while node1 != node2:
node1 = node1.next if node1 else headB
node2 = node2.next if node2 else headA
return node1