标签:Node head 单链 交叉 two next 判断 new NULL
思路:只需两层while循环即可,事件复杂度O(n*m),外层循环代表其中体格链表指针每次只移动一个位置,内层循环代表另一个链表的指针需从头到尾移动每次移动一个位置,每次都需要判断当前指针是不是等于外层循环的指针,如果相等,则代表有交叉。当两层循环结束后,还没碰到相同的情况,则代表无交叉。
点击查看代码
#include <iostream>
using namespace std;
struct Node {
Node* next;
//int value;
};
bool has_overlap(Node* head_one, Node* head_two)
{
if (head_one->next == NULL || head_two->next == NULL)
return false;
Node* p_one = head_one;
Node* p_two = head_two;
while (p_one->next != NULL)
{
p_two = head_two;
while (p_two->next != NULL)
{
if (p_one == p_two)
return true;
p_two = p_two->next;
}
p_one = p_one->next;
}
return false;
}
int main()
{
Node* head = new Node;
head->next = NULL;
Node* p1 = new Node;
head->next = p1;
Node* p2 = new Node;
p1->next = p2;
p2->next = NULL;
Node* head1 = new Node;
head1->next = NULL;
Node* p11 = new Node;
head1->next = p11;
Node* p21 = new Node;
p11->next = p21;
p21->next = NULL;
if (has_overlap(head, head1))
{
cout << "有交叉" << endl;
}
else
{
cout << "无交叉" << endl;
}
p21->next = p1;
if (has_overlap(head, head1))
{
cout << "有交叉" << endl;
}
else
{
cout << "无交叉" << endl;
}
return 0;
}
标签:Node,head,单链,交叉,two,next,判断,new,NULL 来源: https://www.cnblogs.com/arivin/p/16247662.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。