您的位置:首页 > 其它

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

2017-05-03 20:41 344 查看


题目描述

输入两个链表,找出它们的第一个公共结点。

先分别遍历链表1和链表2的长度,设长度差为n。长的先走n步,再和短的一起走,得到两个链表的第一个公共节点。

/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
unsigned int GetLength(ListNode* Node)
{
unsigned int length=0;
ListNode* pNode=Node;
while(pNode!=NULL)
{
++length;
pNode=pNode->next;
}
return length;
}
ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
unsigned int length1=GetLength(pHead1);
unsigned int length2=GetLength(pHead2);
int dislength=length1-length2;
ListNode* pListNodeLong=pHead1;
ListNode* pListNodeShort=pHead2;
if(length2>length1)
{
pListNodeLong=pHead2;
pListNodeShort=pHead1;
dislength=length2-length1;
}
// pListNodeLong=(length2>=length1)?pHead2:pHead1;
// pListNodeShort=(length2<length1)?pHead2:pHead1;
for(int i=0;i<dislength;++i)
pListNodeLong=pListNodeLong->next;
while((pListNodeLong!=NULL)&&(pListNodeShort!=NULL)&&(pListNodeLong!=pListNodeShort))
{
pListNodeLong=pListNodeLong->next;
pListNodeShort=pListNodeShort->next;
}
ListNode* pFirst=pListNodeLong;
return pFirst;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: