面试题52. 两个链表的第一个公共节点
输入两个链表,找出它们的第一个公共节点。


注意:
如果两个链表没有交点,返回 null.
在返回结果后,两个链表仍须保持原有的结构。
可假定整个链表结构中没有循环。
程序尽量满足 O(n) 时间复杂度,且仅用 O(1) 内存。
本题与主站 160 题相同:https://leetcode-cn.com/problems/intersection-of-two-linked-lists/
参考视频:https://www.bilibili.com/video/av46297857?from=search&seid=3425539323744682331
# 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:
p1 , p2 = headA , headB
while p1 != p2:
if not p1:
p1 = headB
else:
p1 = p1.next
if not p2:
p2 = headA
else:
p2=p2.next
return p1

本文介绍了一种高效查找两个链表第一个公共节点的算法,适用于无环链表,满足O(n)时间复杂度和O(1)空间复杂度的要求。通过双指针技巧,即使链表长度不同也能正确找到交点。
274

被折叠的 条评论
为什么被折叠?



