题解 | #两个链表的第一个公共结点#

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

https://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46

import java.util.*;
/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
    public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
        if (pHead1 == null || pHead2 == null) {
            return null;
        }

        // 得到两节点的长度
        ListNode pointer1 = pHead1;
        ListNode pointer2 = pHead2;
        int k1 = 1;
        int k2 = 1;
        while (pointer1.next != null) {
            k1++;
            pointer1 = pointer1.next;
        }
        while (pointer2.next != null) {
            k2++;
            pointer2 = pointer2.next;
        }

        // 无交点
        if (pointer1 != pointer2) {
            return null;
        }

        // 计算两节点的差距,让长的链表先走完差距,直到两个链表一样长
        pointer1 = pHead1;
        pointer2 = pHead2;
        if (k1 > k2) {
            int distance = k1 - k2;
            for (int i = 0; i < distance; i++) {
                pointer1 = pointer1.next;
            }
        } else {
            int distance = k2 - k1;
            for (int i = 0; i < distance; i++) {
                pointer2 = pointer2.next;
            }
        }

        // 找到交叉节点
        while (pointer1 != pointer2) {
            pointer1 = pointer1.next;
            pointer2 = pointer2.next;
        }
        return pointer1;
    }
}

全部评论

相关推荐

程序员花海_:实习和校招简历正确格式应该是教育背景+实习+项目经历+个人评价 其中项目经历注意要体现业务 实习经历里面的业务更是要自圆其说 简历模板尽可能保持干净整洁 不要太花哨的
点赞 评论 收藏
分享
头像 会员标识
12-16 14:43
浙江大学 Java
投递牛客等公司9个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务