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

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

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

/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
            val(x), next(NULL) {
    }
};*/
class Solution {
  public:
    ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
        if (pHead1 == nullptr || pHead2 == nullptr) return NULL;
	  //先遍历两个链表得到它们的长度
        int n1 = 0, n2 = 0;
        ListNode* node1 = pHead1;
        ListNode* node2 = pHead2;
        while (node1) {
            n1++;
            node1 = node1->next;
        }
        while (node2) {
            n2++;
            node2 = node2->next;
        }
        int n = abs(n1 - n2);
        node1 = pHead1;
        node2 = pHead2;
	  //较长的链表先走长度差值的距离,n更新为较短链表的长度
        if (n1 < n2) {
            while (n--) {
                node2 = node2->next;
            }
            n = n1;
        } else {
            while (n--) {
                node1 = node1->next;
            }
            n = n2;
        }
	  //两个链表指针同时走,如果指向相同说明链表相交
        while (n-- && node1 != node2) {
            node1 = node1->next;
            node2 = node2->next;
        }
        if (node1 == node2) return node1;
        else return NULL;
    }
};

全部评论

相关推荐

06-13 10:15
门头沟学院 Java
想去夏威夷的大西瓜在午休:我也是27届,但是我现在研一下了啥项目都没有呀咋办,哎,简历不知道咋写
点赞 评论 收藏
分享
frutiger:逆天,我家就安阳的,这hr咋能说3k的,你送外卖不比这工资高得多?还说大厂来的6k,打发叫花子的呢?这hr是怎么做到说昧良心的话的
点赞 评论 收藏
分享
企业都这么缺人了吗?缺人为什么还给白菜价!
真起不了响亮的名字:我给你出个主意,把公司报出来,让牛友去投,岂不美哉
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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