54.两个链表的第一个公共结点

输入两个链表,找出它们的第一个公共结点。

当不存在公共节点时,返回空节点。

数据范围:

链表长度 [1,30000]。
保证两个链表不完全相同,即两链表的头结点不相同。

样例:

给出两个链表如下所示:
image
输出第一个公共节点c1

代码:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
class Solution {
    public ListNode findFirstCommonNode(ListNode headA, ListNode headB) {
        //A指向A链表的头节点,B指向B链表的头节点
        ListNode A = headA,B = headB;
        //只要A不等于B就不断移动指针
        //退出情况有两种:1.A和B指向同一个节点,且不为null,2.A和B都指向null
        while(A!=B){
            //判断A是否为null,不为null则指针向后移,否则指针指向B的头节点
            A = A!=null?A.next:headB;
            //判断B是否为null,不为null则指针向后移,否则指针指向A的头节点
            B = B!=null?B.next:headA;
        }
        //如果A和B有公共节点的话,则A遍历完自己的链表再从B头节点开始遍历会和B遍历完自己的链表再从A头节点开始遍历重合,此时就可以返回其中任意一个节点
        //如果A和B没有公共节点的话,则A和B都会是null,直接返回
        return A;
    }
}
posted @ 2025-05-30 09:15  回忆、少年  阅读(14)  评论(0)    收藏  举报