码迷,mamicode.com
首页 > 其他好文 > 详细

37.两个链表的第一个公共结点

时间:2015-07-10 19:13:07      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:链表

题目:输入两个链表,找出它们的第一个公共结点,链表结点定义如下:

struct  ListNode

{

         int m_nKey;

         ListNode*  m_pNext;

};

技术分享技术分享

技术分享

ListNode* FindFirstComonNode(ListNode* pHead1, ListNode* pHead2)
{
//得到两个链表的长度
unsigned int nLength1 = GetListLength(pHead1);
unsigned int nLength2 = GetListLength(pHead2);
int nLengthDif = nLength1 - nLength2;
ListNode* pListHeadLong = pHead1;
ListNode* pListHeadShort = pHead2;
if (nLength2 > nLength1)
{
pListHeadLong = pHead2;
pListHeadShort = pHead1;
nLengthDif = nLength1 - nLength2;
}
//先在长链表上走几步,再同时在两个链表上遍历
for (int i = 0; i < nLengthDif; ++i)
pListHeadLong = pListHeadLong->m_pNext;
while ((pListHeadLong != NULL) && (pListHeadShort != NULL) && (pListHeadLong!=pListHeadShort)
{
pListHeadLong = pListHeadLong->m_pNext;
pListHeadShort = pListHeadShort->m_pNext;
}
//得到第一个公共结点
ListNode* pFirstCommonNode = pListHeadLong;
return pFirstCommonNode;
}
unsigned  int GetListLength(ListNode* pHead)
{
unsigned int nLength = 0;
ListNode* pNode = pHead;
while (pNode != NULL)
{
++nLength;
pNode = pNode->m_pNext;
}
return nLength;
}

技术分享


版权声明:本文为博主原创文章,未经博主允许不得转载。

37.两个链表的第一个公共结点

标签:链表

原文地址:http://blog.csdn.net/wangfengfan1/article/details/46832539

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!