两个链表的第一个公共结点
使用空间存储节点的解法
class Solution {
public:
set<ListNode*> s;
ListNode *findFirstCommonNode(ListNode *headA, ListNode *headB) {
for (auto i = headA; i ; i=i->next)
s.insert(i);
for (auto i = headB; i ; i=i->next)
if(s.count(i)) return i;
return NULL;
}
};
不使用空间,解法一
如果有公共结点肯定是在后面重叠,且后面部分都是共同的。
- 先计算出两个链表的长度,可以让比较长的先走两个链表长度之差的步数,两个再一起走。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *findFirstCommonNode(ListNode *headA, ListNode *headB) {
int len1=0,len2=0;
auto i=headA,j=headB;
for (auto i = headA; i ; i=i->next) len1++;
for (auto i = headB; i ; i=i->next) len2++;
if(len1<len2)
{
swap(len1,len2);
swap(i,j);
}
int offset=len1-len2;
for (int t = 0; t < offset; t ++ ) i=i->next;
while(i)
{
if(i==j) return i;
i=i->next;
j=j->next;
}
return NULL;
}
};
有帮助的话可以点个赞,我会很开心的~
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?