#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;
}