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

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

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

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

    ListNode(int val) {
        this.val = val;
    }
}*/

// 采用双指针,因为两个链表前面不同,后面相同
// 假设p1长x1,p2长x2,后面共同长度为y
// 我们让p1指针走x1+y+x2,p2指针走x2+y+x1,走相同路程后的下一个点肯定是y的起点也就是第一个公共节点
public class Solution {
    public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {

        // 当整体为空时,肯定不会有公共点
        if(pHead1 == null || pHead2 == null){
            return null;
        }

        // 由于第二次大循环必定相遇,所以我们将无公共节点的判断条件设在第二个大循环之后(也就是三个小循环)
        int count = 0;

        // 双指针
        ListNode node1 = pHead1;
        ListNode node2 = pHead2;

        // 整体移动
        while(count < 3){

            // 相等,返回
            if(node1 == node2){
                return node1;
            }

            // 移动,若到头,转移到另一条链表
            node1 = node1.next;
            if(node1 == null){
                node1 = pHead2;
                // count小循环++,当count=3时,说明有指针开始了第三次循环,则无公共节点
                count++;
            }

            // 移动,若到头,转移到另一条链表
            node2 = node2.next;
            if(node2 == null){
                node2 = pHead1;
                // count小循环++,当count=3时,说明有指针开始了第三次循环,则无公共节点
                count++;
            }

        }

        // 若未相遇,说明无公共节点
        return null;
 
    }
}

全部评论

相关推荐

我面试,她问我有女朋友没
不太迷人的反派_:不过对象,还会结合你老家,意向城市等等,看你是否稳定。哥们,别多想
点赞 评论 收藏
分享
06-20 15:23
门头沟学院 Java
难道你们背八股都不觉得累?现在每天背八股背的我想吐
想去大厂的土豆子:累不累都是对比出来的,八股可比高考、考研轻松多了
点赞 评论 收藏
分享
06-04 09:27
门头沟学院 Java
点赞 评论 收藏
分享
不要停下啊:大二打开牛客,你有机会开卷了,卷起来,去找课程学习,在牛客上看看大家面试笔试都需要会什么,岗位有什么需求就去学什么,努力的人就一定会有收获,这句话从来都经得起考验,像我现在大三了啥也不会,被迫强行考研,炼狱难度开局,啥也不会,找工作没希望了,考研有丝丝机会
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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