一、任务:
给你两个单链表的头节点 headA
和 headB
,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null
。
图示两个链表在节点 c1
开始相交:
题目数据 保证 整个链式结构中不存在环。
注意,函数返回结果后,链表必须 保持其原始结构 。
二、思路:
用两个指针,node.next查找相同链表,但是无法保证同时到达相同节点,因此需要遍历两遍,即A遍历完,去遍历B,B遍历完去遍历A,这样每个指针都会走A+B这两个链表,而相同之处肯定在末尾,因此在最后会同时达到相同节点
三、解答
# 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) -> Optional[ListNode]:
A,B = headA,headB
while A != B:
A = A.next if A else headB
B = B.next if B else headA
return A
确实挺浪漫的,我走过你走的路,只为与你相见。