Skip to content

3月23日报(链表)

约 467 字大约 2 分钟

日报leetcode

2026-03-23

  • 完成了矩阵板块,已添加到 3月19 日报
  • 做了点链表题

相交链表

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。

图示两个链表在节点 c1 开始相交

题目数据 保证 整个链式结构中不存在环。 注意,函数返回结果后,链表必须 保持其原始结构 。

思路解析

当我们无路可走时,试着走彼此的路. 如果到最后我找不到你,那么你也找不到我,我们没有缘分了(?)

设「第一个公共节点」为 node ,「链表 headA」的节点数量为 a ,「链表 headB」的节点数量为 b ,「两链表的公共尾部」的节点数量为 c 借灵神个图
于是我们有以下流程 若是两条链不相交,因为 a2 和 b3 的下一个节点都是空节点, 可以视作在空节点相交 由于 x + y = y + х,两个指针最终都会走到空节点 具体算法如下:

  1. 初始化指针 A、B;
  2. 持续循环,直至 A = B;
  3. 每一次循环都会使两个指针都向后一步,直到遇到 null
  4. 循环结束,如果两链表相交,则 A 与 B 在链表相交处,返回答案;如果不相交,A 和 B 都在空节点,直接返回答案

代码实现

/**  
 * Definition for singly-linked list. 
* public class ListNode { 
*     int val; 
*     ListNode next; 
*     ListNode(int x) { 
*         val = x; 
*         next = null; 
*     } 	              
* } 
*/
  public class Solution {  
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {  
        ListNode A = headA, B = headB;  
        while (A != B) {  
            A = A != null ? A.next :headB;  
            B = B != null ? B.next : headA;  
        }  
        return A;  
    }  
}