160. 相交链表

160. 相交链表

思路

难点在于,由于两条链表的长度可能不同,两条链表之间的节点无法对应:如果用两个指针 p1 和 p2 分别在两条链表上前进,并不能同时走到公共节点,也就无法得到相交节点 c1

解决这个问题的关键是,通过某些方式,让 p1 和 p2 能够同时到达相交节点 c1

让 p1 遍历完链表 A 之后开始遍历链表 B,让 p2 遍历完链表 B 之后开始遍历链表 A,这样相当于「逻辑上」两条链表接在了一起。

如果这样进行拼接,就可以让 p1 和 p2 同时进入公共部分,也就是同时到达相交节点

代码

Python

# 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]:
        # p1 指向 A 链表头结点,p2 指向 B 链表头结点        
        p1 = headA
        p2 = headB

        while p1 != p2:
            # 如果 p1 到达链表 A 的末尾,则将其重定向到链表 B 的头部
            p1 = headB if p1 is None else p1.next
            # 如果 p2 到达链表 B 的末尾,则将其重定向到链表 A 的头部
            p2 = headA if p2 is None else p2.next
        
        return p1
posted @ 2026-07-17 17:17  wyzsgy  阅读(3)  评论(0)    收藏  举报