剑指offer04 JZ52 两个链表的第一个公共结点

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

https://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46?tpId=13&tqId=23257&ru=%2Fpractice%2Fd8b6b4358f774294a89de2a6ac4d9337&qru=%2Fta%2Fcoding-interviews%2Fquestion-ranking&sourceUrl=%2Fexam%2Foj%2Fta%3Fpage%3D1%26tpId%3D13%26type%3D13

/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
    public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
            ListNode l1=pHead1;
            ListNode l2=pHead2;
        //使用两个指针N1,N2,一个从链表1的头节点开始遍历,
        //我们记为N1,一个从链表2的头节点开始遍历,我们记为N2。
        //相遇条件为两个指针相等 要么相等相遇 要么两个值都为null相遇
        //两个链表以相同速度行走,单看一个链表的轨迹就是一个圆形。
        //两个指针行走的路径形成了两个圆。路线相同长。以相同的速度行走最终一定会相遇。
        //
        while(l1!=l2){
            if (l1==null){
                l1=pHead2;//路径1 走到尽头 从路径2行走。形成一个圆。
            }else{
                l1=l1.next; //向下走
            }
            //以下同理
            if(l2==null){
                l2=pHead1;
            }else{
                l2=l2.next;
            }
        }
        //当循环退出一定会找到相同的公共节点 null也为一种情况。
        return l2;
    }
}

alt

全部评论

相关推荐

不愿透露姓名的神秘牛友
10-05 10:13
已编辑
HHHHaos:让这些老登来现在秋招一下,简历都过不去
点赞 评论 收藏
分享
三年之期已到我的offer快到碗里来:9硕都比不上9本
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务