# C++ 解决求两个链表的第一个公共结点问题

## 示例：

{1,2,3},{4,5},{6,7}

{6,7}

## 解题思路：

```/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
while(a!=b)
{
}
return a;
}
};```

## 补充

```// FindFirstCommandNode.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include
using namespace std;

struct ListNode
{
int         m_nKey;
ListNode*   m_pNext;

ListNode(int i):m_nKey(i)
{

}
};

//获取链表长度
{
int nLength = 0;
ListNode* pNode = pHead;
while (pNode != NULL)
{
++nLength;
pNode = pNode->m_pNext;
}
return nLength;
}

{

int  nLength1 = GetListLength(pHead1);
int  nLength2 = GetListLength(pHead2);
int nLengthDif = 0;//两个链表的长度差
ListNode* pListHeadLong  = NULL;//用于指向长链表
ListNode* pListHeadShort = NULL;//用于指向短链表

//根据长度判断 链表指向
if (nLength1 > nLength2)
{
nLengthDif = nLength1 - nLength2;
}
else
{
nLengthDif = nLength2 - nLength1;
}

//先对长链表进行移动 移动到与短链表长度相同的位置
for (int i = 0; i < nLengthDif; i++)
{
}
//寻找公共节点
{
}
if (pListHeadLong != NULL)
{
}
else
{
return NULL;//否则返回NULL
}
}

int _tmain(int argc, _TCHAR* argv[])
{

ListNode* head1 = new ListNode(0);
ListNode* head2 = new ListNode(1);
ListNode* node0 = new ListNode(22);
ListNode* node1 = new ListNode(2);
ListNode* node2 = new ListNode(3);
ListNode* node3 = new ListNode(4);
ListNode* node4 = new ListNode(5);
ListNode* node5 = new ListNode(6);
ListNode* node6 = new ListNode(7);
ListNode* node8 = new ListNode(6);

node1->m_pNext = node0;
node0->m_pNext = node3;
node3->m_pNext = node5;
node5->m_pNext = node6;
node6->m_pNext = NULL;