思路:
双指针
- 两个指针p,q分别在两个链表a,b的头节点开始走
- 链表a长度为a+c;链表b的长度为b+c,交点在从各自头节点开始p走a步,q走b步、
- 让p,q每次同时走一步,当走到当前链表终点时就从另一个链表的头节点开始继续走
- 当p,q都走了a+b+c步的时候,它们就会相遇在交点了
步骤:
1、所以方法就是让p,q沿着各自链表走完再转到另一个链表继续走,当p,q指向的节点相同停止
2、处理特殊情况:若不相交,p,q永远不会相遇,则停止条件为两个指针都最终指向另一个链表的尾节点后面的空节点
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode:
p = headA; q = headB
while p != q:
if p:
p = p.next
else:
p = headB
if q:
q = q.next
else:
q = headA
return p