剑指offer——两个链表的第一个公共结点

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 20:58   1697   0

首先计算两个链表的长度m,n,让较长的链表先走|m-n|,然后两个链表一起走,直到找到元素相同的结点。

#include <iostream>
using namespace std;

ListNode
{
 int m_data;
 ListNode *m_next;
};

unsigned int GetListLength(ListNode* pHead)
{
 unsigned int nLength=0;
 ListNode* pNode=pHead;
 while(pNode!=NULL)
 {
  ++nLength;
  pNode=pNode->m_next;
 }
}

ListNode* FindFirstCommonNode(ListNode* pHead1,ListNode* pHead2)
{
 unsigned int nLength1=GetListLength(pHead1);
 unsigned int nLength2=GetListLength(pHead2);
 int nLengthDif=nLength1-nLength2;
 ListNode* pListLong=pHead1;
 ListNode* pListShort=pHead2;
 if (nLength2>nLength1)
 {
  pListLong=pHead2;
  pListShort=pHead1;
  nLengthDif=-nLengthDif;
 }
 for (int i=0;i<nLengthDif;i++)
 {
  pListLong=pListLong->m_next;
 }
 while((pListLong!=NULL)&&(pListShort!=NULL)&&(pListLong!=pListShort))
 {
  pListLong=pListLong->m_next;
  pListShort=pListShort->m_next;
 }
 ListNode* pFirstCommonNode=pListLong;
 return pFirstCommonNode;
}


分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP