typedef struct LNode{
int data;
struct LNode *next;
}LNode, *LinkList;
/*鏈表*/
LinkList List_TailInsert(LinkList L) {
int x;
L = (LinkList)malloc(sizeof(LNode));
L->next = NULL;
LNode *s, *r = L;
cout << "尾插法創建單鏈表:";
while (true) {
cin >> x;
s = (LNode*)malloc(sizeof(LNode));
s->data = x;
r->next = s;
r = s;
if (cin.get() == '\n')break;
}
r->next = NULL;
return L;
}
void List_Print(LinkList L) {
LNode *p;
p = L->next;
while (p) {
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
int List_Length(LinkList L) {
int L_length = 0;
LNode *p=L->next;
while (p) {
L_length++;
p = p->next;
}
return L_length;
}
LinkList findCom(LinkList L, LinkList N) {
int L_length=0,N_length = 0,pos= 0;
LNode *longer, *shorter;
L_length = List_Length(L);
N_length = List_Length(N);
if (L_length > N_length) {
pos = L_length - N_length;
longer = L->next;
shorter = N->next;
}
else {
pos = N_length - L_length;
longer = N->next;
shorter = L->next;
}
while (pos--)longer = longer->next;
while (longer&&shorter)
{
if (longer->data == shorter->data)return longer;
longer = longer->next;
shorter = shorter->next;
}
cout << "沒有公共節點";
return NULL;
}
int main() {
LinkList L = NULL;
LinkList N = NULL;
L = List_TailInsert(L);
N = List_TailInsert(N);
L=findCom(L, N);
while (L)
{
cout << L->data << " ";
L=L->next;
}
}