您的位置:首页 > 其它

判断两个链表是否相交,及其第一个公共交点

2017-10-11 17:06 507 查看
输入两个链表,找出它们的第一个公共结点。

算法思路:若两个链表相交,则从交点开始连个链表的交点都相同。

/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
ListNode *p1=pHead1;
ListNode *p2=pHead2;
int len1=0,len2=0,diff=0;
//遍历第一个链表
while(p1!=NULL){
p1=p1->next;
len1++;
}
//遍历第二个链表
while(p2!=NULL){
p2=p2->next;
len2++;
}
//判断两个链表的长度,找出长度比较大的链表
if(len1>len2){
diff=len1-len2;
p1=pHead1;
p2=pHead2;
}
else{
diff=len2-len1;
p1=pHead2;
p2=pHead1;
}
//让长度比较大的链表先走长度差步数
for(int i=0;i<diff;i++){
p1=p1->next;
}
//两个链表比较,若两个节点相同,则为两个链表的交点
while(p1!=NULL && p2!=NULL){
if(p1==p2)
break;
p1=p1->next;
p2=p2->next;
}
return p1;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  链表
相关文章推荐