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

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

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

/*
struct ListNode {
	int val;
	struct ListNode *next;
	ListNode(int x) :
			val(x), next(NULL) {
	}
};*/
#include <unordered_set>
class Solution {
public:
	// 双指针遍历,遍历完自己的链表就去遍历另一个链表,直到两个指针相遇
	ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
		ListNode* head1 = pHead1;
		ListNode* head2 = pHead2;
		while (pHead1 != pHead2) {
			if (pHead1==nullptr) {
				pHead1 = head1;
			}
			else {
				pHead1 = pHead1->next;
			}
			if(pHead2 == nullptr){
				pHead2 = head2;
			}
			else {
				pHead2 = pHead2->next;
			}

		}
		return pHead1;
	}
	// 哈希表 空间复杂度O(n)
    // ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
    //     unordered_set<ListNode*> hax;
	// 	while (pHead1) {
	// 		hax.insert(pHead1);
	// 		pHead1 = pHead1->next;
	// 	}
	// 	while (hax.count(pHead2)==0 && pHead2) {
	// 		pHead2 = pHead2->next;
	// 	}
	// 	return pHead2;
    // }
};

两个方法

一:双指针法. 使用两个指针同样的速度遍历两个链表,并且当遍历完自己的链表后就去遍历另一个链表,直到两个指针相遇。

二:哈希表法. 首先遍历其中一个链表,并把节点指针保存在哈希表中,当遍历另一个链表时,判断当前节点指针是否已经存在于上述哈希表中,如果是则输出此节点。

全部评论

相关推荐

10-21 11:29
门头沟学院 C++
女生,武汉人1、瑞声科技,软件开发,南京,已发意向(搜不到相关信息,听面试官说做的方向跟我研究生课题强相关)2、烽火通信,软开,武汉,等开奖(国企,但是网上差评好多)3、四方继保,研发岗,武汉,已谈薪,等开奖(私企,但是福利待遇都挺不错,网上说是入职要出差半年)
7946163461:四方鸡煲,快跑,,,里面管理混乱的一笔,跟你谈的福利根本拿不到全额,,,绩效卡的一笔,你不出差不加班,根本拿不到,出差和加班你也拿不到,,还必须会舔领导,阿谀奉承那种才OK。。。学姐给我的血泪,她已经跑路了,,,烽火你多查查,风评一边倒,,,南京那个风评还可以
投递烽火通信等公司10个岗位 >
点赞 评论 收藏
分享
勇敢的联想人前程似锦:如果我是你,身体素质好我会去参军,然后走士兵计划考研211只需要200多分。
点赞 评论 收藏
分享
09-02 17:43
门头沟学院 C++
空๑۩۞۩๑白:学历硬伤,先多看看中厂拿个保底吧
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务