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

原创 2015年07月10日 16:36:02

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

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;
}




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

相关文章推荐

剑指offer-面试题37.两个链表的第一个公共结点

题目:输入两个链表,找出它们的第一个公共结点,链表结点的定义如下: 1 struct ListNode 2 { 3 int m_nKey; 4 ListNode* m_p...

程序员面试题精选100题(35)-两链表的第一个公共结点[数据结构]

题目:两个单向链表,找出它们的第一个公共结点。 链表的结点定义为: struct ListNode {       int        &#...

【剑指Offer面试编程题】题目1505:两个链表的第一个公共结点--九度OJ

本题应该非常经典的题目了,但这种题目我们往往有时候需要注意来输入的不止两个链表的情况,但本题目中已经很清晰的说明了只有两个链表。另外,既然是单链表,就不存在有一个节点具有多个指针指向其他节点。 ...

[剑指offer学习心得]之:两个链表的第一个公共结点

题目:输入两个链表,找出它们的第一个公共结点。看到这道题,第一个想到的自然是暴力法:第一链表上顺序遍历每个结点,每遍历到一个结点,在第二个链表上顺序遍历每个结点。如果在第二个链表上有一个结点和第一个链...

电话面试:求两个链表的第一个公共结点

求两个链表的第一个公共结点 题目另外一种说法也可以为两个链表第一个交点。首先确定相交在链表上的含义,链表相交意味着某个节点到链表尾都是相同。其实这个问题可以联想到路程相遇问题,如何使得两个链表同时到...

算法-寻找两个链表的第一个公共结点

题目: 输入两个链表,找到他们的第一个公共结点,链表结点定义如下:struct ListNode { int value; ListNode *next; };解题思路: 首先我们需要想...

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

题目描述 输入两个链表,找出它们的第一个公共结点。 思路一:两条相交的链表呈Y型。可以从两条链表尾部同时出发,最后一个相同的结点就是链表的第一个相同的结点。可以利用栈来实现。时...

九度 题目1505:两个链表的第一个公共结点

题目来源:http://ac.jobdu.com/problem.php?pid=1505

两链表的第一个公共结点

题目:两个单向链表,找出它们的第一个公共结点。 链表的结点定义为:   struct ListNode { int m_nKey; ListNode* ...

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

题目描述: 输入两个链表,找出它们的第一个公共结点。 方法一:分别把两个链表的结点放入两个栈中,这样两个链表的尾结点就位于两个栈的栈顶,接下来比较两个栈顶的结点是否相同。如果相同,则把栈顶弹出...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)