算法思想:挨个比较,元素值小(指针)的向后移动,最后为空,相等就复制给s插入C链表
#include<stdio.h>
#include <bits/stdc++.h>
typedef struct lnode{
int data;//数据
struct lnode *next;//指针域
}lnode,*LinkList;
int a[5]={1,3,5,7,9};
int b[5]={2,3,5,9,10};
int n=5;
void InitList(LinkList &L,int t[]){//尾插法初始化链表
L=(LinkList)malloc(sizeof(lnode));
lnode *s,*r=L;
for(int i=0;i<n;i++){
s=(lnode*)malloc(sizeof(lnode));
s->data=t[i];
r->next=s;
r=s;
}
r->next=NULL;
}
void Print(LinkList L){
lnode *s=L->next;
while(s){
printf("%d ",s->data);
s=s->next;
}
printf("\n");
}
LinkList C;
void Get_common(LinkList &A,LinkList &B){
lnode *p=A->next,*q=B->next;
//LinkList C=(LinkList)malloc(sizeof(lnode));
//上面那句死活没有输出,因为全局定义了一个LinkList C,如果这里又重新定义,我们返回的是全局的为空
C=(LinkList)malloc(sizeof(lnode));
lnode *r,*s;
C->next=NULL;
r=C;
while(p!=NULL&&q!=NULL){
//printf("sad");
if(p->data<q->data){
p=p->next;
}else if(p->data>q->data){
q=q->next;
}else{
s=(lnode*)malloc(sizeof(lnode));
s->data=p->data;
r->next=s;//尾插
r=s;
p=p->next;
q=q->next;
}
}
r->next=NULL;
}
int main(){
LinkList L1,L2;
InitList(L1,a);
InitList(L2,b);
Print(L1);
Print(L2);
Get_common(L1,L2);
Print(C);
return 0;
}
下面给出测试数据