struct Node
{
int val;
Node *next;
Node(int val_in):val(val_in), next(NULL)
{
}
};
Node* getTail(Node* head, int& size)
{
size = 0;
if(NULL == head)
return NULL;
while(NULL != head->next)
{
head = head->next;
++size;
}
return head;
}
Node* findFirstCommonNode(Node* heada, Node* headb)
{
if(NULL == heada && NULL == headb)
return false;
int la, lb;
if(getTail(heada, la) == getTail(headb, lb))
{
if(la < lb)
swap(heada, headb);
for(int i = 0; i < abs(la - lb); ++i)
heada = heada->next;
while(heada != headb)
{
heada = heada->next;
headb = headb->next;
}
return heada;
}
return NULL;
}
int main()
{
Node* heada = NULL;
for(int i = 0; i < 10; ++i)
{
Node *temp = new Node(i);
temp->next = heada;
heada = temp;
}
Node* headb = heada->next->next->next->next;
//Node *headb = NULL;
for(int i = 10; i < 20; ++i)
{
Node *temp = new Node(i);
temp->next = headb;
headb = temp;
}
Node* firstCommonNode = findFirstCommonNode(heada, headb);
if(NULL != firstCommonNode)
cout << firstCommonNode->val << endl;
return 1;
}
两链表相交,寻找第一个交点
最新推荐文章于 2020-07-12 15:03:40 发布