剑指offer:52-题解 | #两个链表的第一个公共结点#

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

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

题目描述


alt 示例1

输入: {1,2,3},{4,5},{6,7}

返回值: {6,7}

说明: 第一个参数{1,2,3}代表是第一个链表非公共部分,第二个参数{4,5}代表是第二个链表非公共部分,最后的{6,7}表示的是2个链表的公共部分 这3个参数最后在后台会组装成为2个两个无环的单链表,且是有公共节点的


题解1:双指针模式

使用两个指针p1,p2,p1从链表1的头节点开始遍历,p2链表2的头节点开始遍历。 p1和p2一起遍历,当p1先走完链表1的尽头(为null)的时候,则从链表2的头节点继续遍历,同理,如果p2先走完了链表2的尽头,则从链表1的头节点继续遍历.

因为两个指针,同样的速度,走完同样长度(链表1+链表2),不管两条链表有无相同节点,都能够到达同时到达终点。

有公共节点的时候,p1和p2必会相遇,因为长度一样嘛,速度也一定,必会走到第一个公共的节点

无公共节点的时候,p1和p2则都会走到终点NULL处。

图示为大佬解释图片,非常nice https://uploadfiles.nowcoder.com/files/20210621/908787715_1624289962297/36.gif alt


/*
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 ==NULL || pHead2 == NULL) return NULL;
        ListNode * p1 = pHead1;
        ListNode * p2 = pHead2;
        while(p1 != p2){
            p1 = p1==NULL ? pHead2:p1->next;//p1没走到NULL,则p1指向下一个节点;走到NULL,p1指向Phead2
            p2 = p2==NULL ? pHead1:p2->next;
        }
        return p1;
    }
};

题解2:暴力循环

对链表pHead1的每一个节点,查找链表pHead2上是否存在相同的节点

/*
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 ==NULL || pHead2 == NULL) return NULL;
        题解1:对链表的每个节点进行遍历
        while(pHead1){
            ListNode * temp = pHead2;
            while(temp){
                if(pHead1==temp)
                    return pHead1;
                else{
                    temp = temp->next;
                }
            }
            pHead1 = pHead1->next;
        }
        return NULL;
    }
};
全部评论

相关推荐

我是没经验的毕业生,这啥情况啊会不会是hr在刷kpi
JamesGosli...:字节boss属于是群发了,我都快入职字节了,其他部门还在和我boss打招呼
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-04 18:02
好不容易拿到了字节Offer,鼠鼠做后端的,但家里人觉得可能被裁员不稳定,让鼠鼠去投国企,现在好纠结到底该咋选
文档传偷助手:该投就投吧,不过建议别放弃offer 拿到手里的才是最好的
投递字节跳动等公司8个岗位
点赞 评论 收藏
分享
06-17 00:26
门头沟学院 Java
程序员小白条:建议换下项目,智能 AI 旅游推荐平台:https://github.com/luoye6/vue3_tourism_frontend 智能 AI 校园二手交易平台:https://github.com/luoye6/vue3_trade_frontend GPT 智能图书馆:https://github.com/luoye6/Vue_BookManageSystem 选项目要选自己能掌握的,然后最好能自己拓展的,分布式这种尽量别去写,不然你只能背八股文了,另外实习的话要多投,尤其是学历不利的情况下,多找几段实习,最好公司title大一点的
无实习如何秋招上岸
点赞 评论 收藏
分享
宇算唯航:目测实缴资本不超100W的小公司
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

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