62.找出链表的第一个公共结点。 题目:两个单向链表,找出它们的第一个公共结点。
两个单向的链表如果有公共节点,则其一定是Y形状的。从第一个公共节点开始都是一样的。
第一个公共节点之前是不同的。
如果这两个链表是长度相同的,那么可以两个链表遍历,直到找到二者相同的节点为止,就为第一个公共节点。
如果这两个链表的长度不同,那么就先把这两个链表对齐,然后从对齐的节点开始遍历两个链表,直到找到第一个相同的 节点为止。
Head1->p0->p1->p2->p3->p4->NULL;
Head2->s0->s1->s2->s3->s4->NULL;
先求其长度
typedef struct LinkNode
{
int data;
LinkNode *next;
}node;
int length(node *head)
{
int len = 0;
node *p;
p = head->next;
while(p!=NULL)
{
len++;
p = p->next;
}
return len;
}
node *findx(node *head1,node *head2)
{
int len1;len2;
int i,j;
node *tmp1,*tmp2;
tmp1 = head1->next;
tmp2 = head2->next;
len1 = length(head1);
len2 = length(head2);
if( len1 > len2 )
{
for( i = 0 ; i< (len1-len2) ; i++)
{
tmp1 = tmp1->next;
}
}
if(len1 < len2)
{
for(i = 0;i< (len2-len1) ; i++)
{
tmp2 = tmp2->next;
}
}
while( (tmp1 != NULL) &&(tmp2 != NULL))
{
if( tmp1 == tmp2 )
{
return tmp1;
break;
}
else
{
tmp1 = tmp1->next;
tmp2 = tmp2->next;
}
}
}