#include<stdio.h>
#include<stdlib.h>
typedef struct Lnode{
struct Lnode *next;
int data;
}Lnode,*ListLink;
Lnode* SearchSame(ListLink L1,ListLink L2){
if(L1==NULL || L2==NULL){return NULL;}
int lengthL1=0,lengthL2=0;Lnode *p;
p=L1;
while(p->next!=NULL){lengthL1++;p=p->next;}
p=L2;
while(p->next!=NULL){lengthL2++;p=p->next;}
Lnode *q;
/*if(lengthL1>lengthL2){p=L1;q=L2;
for(int i=0;i<lengthL1-lengthL2;i++){p=p->next;}
for(int i=0;i<lengthL2;i++){p=p->next;q=q->next;
if(p==q){return q;}}}
else{p=L2;q=L1;
for(int i=0;i<lengthL2-lengthL1;i++){p=p->next;}
for(int i=0;i<lengthL1;i++){p=p->next;q=q->next;
if(p==q){return q;}}}*/
if(lengthL1>lengthL2){p=L1;q=L2;
for(int i=0;i<lengthL1-lengthL2;i++){p=p->next;}}
else{p=L2;q=L1;
for(int i=0;i<lengthL2-lengthL1;i++){p=p->next;}}
while(p!=NULL && q!=NULL){p=p->next;q=q->next;
if(p==q){return q;}
}
return NULL;
}
int main(){
ListLink L1,L2;
L1=(Lnode *)malloc(sizeof(Lnode));
L1->next=NULL;//避免脏数据
L2=(Lnode *)malloc(sizeof(Lnode));
L2->next=NULL;
Lnode* p,*q;
p=L1;q=L2;
for(int i=0;i<4;i++){Lnode *s=(Lnode *)malloc(sizeof(Lnode));s->data=i;s->next=NULL;p->next=s;p=s;}
for(int i=4;i<10;i++){Lnode *s=(Lnode *)malloc(sizeof(Lnode));s->data=i;s->next=NULL;q->next=s;q=s;}
Lnode *z1=SearchSame(L1,L2);
if(z1==NULL){printf("没有共同节点\n");}
else{printf("初始共同节点:%d\n",z1->data);}
L1->next=L2->next;
Lnode *z2=SearchSame(L1,L2);
if(z2==NULL){printf("没有共同节点\n");}
else{printf("初始共同节点:%d\n",z2->data);}
return 0;
}