两个链表的第一个公共节点
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;
}
};
相关文章推荐
- 【笔试面试——27】链表07——两个链表的第一个公共节点
- 剑指offer------两个链表的第一个公共节点
- 找到两个单向链表的第一个公共节点
- 寻找两个相交链表的第一个公共节点的问题
- 寻找两个相交链表的第一个公共节点
- Java找出两个链表的第一个公共节点
- 两个链表的第一个公共节点
- 【面试题】剑指Offer-37-求两个链表的第一个公共节点
- 判断两个链表是否有公共节点并返回第一个公共节点
- 两个链表中的第一个公共节点
- 两个链表的第一个公共节点
- 两个链表的第一个公共节点(Java实现)
- 剑指offer 面试题37—两个链表的第一个公共节点
- 两个链表的第一个公共节点
- 面试题37:两个链表的第一个公共节点
- 输入两个链表,找出他们的第一个公共节点
- 剑指offer之两个链表的第一个公共节点
- 两个链表的第一个公共节点
- 面试题 37 两个链表的第一个公共节点
- 两个链表的第一个公共节点