160.相交链表全代码C++
2023-04-18 14:24:29 时间
给你两个单链表的头节点 headA
和 headB
,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null
。
图示两个链表在节点 c1 开始相交:
题目数据 保证 整个链式结构中不存在环。
注意,函数返回结果后,链表必须 保持其原始结构 。
自定义评测:
评测系统 的输入如下(你设计的程序 不适用 此输入):
intersectVal
- 相交的起始节点的值。如果不存在相交节点,这一值为 0
listA
- 第一个链表
listB
- 第二个链表
skipA
- 在 listA 中(从头节点开始)跳到交叉节点的节点数
skipB
- 在 listB 中(从头节点开始)跳到交叉节点的节点数
评测系统将根据这些输入创建链式数据结构,并将两个头节点 headA
和 headB
传递给你的程序。如果程序能够正确返回相交节点,那么你的解决方案将被 视作正确答案 。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/intersection-of-two-linked-lists
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
#include <iostream>
using namespace std;
typedef int ElemType;
typedef int Status;
typedef struct LNode
{
ElemType data;
struct LNode *next;
} LNode,*LinkedList;
Status InitList(LinkedList &L)
{
L= new LNode;
L->next=NULL;
return 1;
}
void CreatList(LinkedList &L,ElemType n)
{
L->next=NULL;
LinkedList r=L;
for(int i=0; i<n; i++)
{
LinkedList p=new LNode;
cin>>p->data;
p->next=NULL;
r->next=p;
r=p;
}
}
void InsertList(LinkedList &L, LinkedList &L1, ElemType n,ElemType s)
{
int a;
L->next=NULL;
LinkedList r=L;
for(int i=0; i<n; i++)
{
LinkedList p=new LNode;
cin>>a;
if(a != s)
{
p->data = a;
p->next=NULL;
r->next=p;
r=p;
}
else
{
break;
}
}
LinkedList ins;
ins = L1;
while(ins->data != s)
{
ins = ins->next;
}
r->next = ins;
}
void GetList(LinkedList &L)
{
LinkedList p;
p=L;
while(p->next)
{
p=p->next;
cout<<p->data<<" ";
}
cout<<endl;
}
int getIntersectionNode(LinkedList &headA, LinkedList &headB)
{
if(headA == NULL || headB == NULL)
{
return -1;
}
LinkedList pA = headA;
LinkedList pB = headB;
while(pA != pB)
{
if(pA == NULL)
{
pA = headB;
}
else
{
pA = pA->next;
}
if(pB == NULL)
{
pB = headA;
}
else
{
pB = pB->next;
}
}
if(pA == NULL)
{
return -1;
}
return pA->data;
}
int main()
{
LinkedList L1,L2;
InitList(L1);
InitList(L2);
cout<<"输入焦点:"<<endl;
int s;
cin>>s;
if(s == 0)
{
cout<<"输入第一个有序链表长度:"<<endl;
int n1;
cin>>n1;
cout<<"正序输入n个元素:"<<endl;
CreatList(L1,n1);
cout<<"L1链表为:";
GetList(L1);
cout<<endl;
cout<<"输入第二个有序链表长度:"<<endl;
int n2;
cin>>n2;
cout<<"正序输入n个元素:"<<endl;
CreatList(L2,n2);
cout<<"L2链表为:";
GetList(L2);
}
else
{
cout<<"输入第一个有序链表长度:"<<endl;
int n1;
cin>>n1;
cout<<"正序输入n个元素:"<<endl;
CreatList(L1,n1);
cout<<"L1链表为:";
GetList(L1);
cout<<endl;
cout<<"输入第二个有序链表长度:"<<endl;
int n2;
cin>>n2;
cout<<"正序输入n个元素:"<<endl;
InsertList(L2,L1,n2,s);
cout<<"L2链表为:";
GetList(L2);
}
int res = getIntersectionNode(L1, L2);
cout<<"焦点为:"<<res<<endl;
return 0;
}
相关文章
- 阿里可观测性数据引擎的技术实践
- 两大主流存储架构介绍:软件定义存储与超融合
- vpn(虚拟私有网络)入门简单原理
- 为AI程序员减负!微软来源深度学习库SynapseML,支持可扩展的智能
- 痛心!36岁比亚迪员工连上夜班猝死
- 当深度学习搭上一双鞋,有人要用这检测你的压力水平!可无线操作,准确率达84%
- 2022 To B数字营销趋势大会圆满举办,共创无边界ABM创新生态!
- 央视网评45岁程序员求职难说了什么?45岁程序员求职难原因是什么
- 360测试之美(笔记)ppt分享二:构建基于B/S架构的远程客户端工具平台
- 360测试之美(笔记)ppt分享三:Andriod UI自动化测试框架的痛点与解决方案
- 360测试之美(笔记)ppt分享四:小型测试团队提效之路
- GitHub仅用6小时修复NPM JavaScript注册表中长期存在的漏洞
- BEIT:基于图像重建进行预训练!微软提出BEIT,Top-1准确率达86.3%!代码已开源!
- 带你通俗易懂了解云计算!
- CLIP2TV:用CLIP和动量蒸馏来做视频文本检索!腾讯提出CLIP2TV,性能SOTA,涨点4.1%!
- [SIGIR'21] DMTL:召回场景基于蒸馏的多目标学习方案
- ISSN码和ISBN码的区别
- iOS开发:Block传值的运用
- More Effective C++:35个改善编程与设计的有效方法
- 苦心研究两周,我特么终于搞懂啥是「元宇宙」了