7-52 两个有序链表序列的交集 (20分)
AC代码
#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
typedef struct node{
int data;
struct node *nxt;
}node, *linklist;
linklist Read(){
linklist L, op;
L = (linklist)malloc(sizeof(node));
L->data = -1;
L->nxt = NULL;
op = L;
int num;
while (scanf("%d", &num) && num != -1){
linklist p = (linklist)malloc(sizeof(node));
p->data = num;
p->nxt = NULL;
op->nxt = p;
op = op->nxt;
}
op->nxt = NULL;
return L;
}
linklist Common(linklist la, linklist lb){
linklist L, op, pa, pb;
L = (linklist)malloc(sizeof(node));
L->data = -1;
L->nxt = NULL;
op = L;
pa = la->nxt;
pb = lb->nxt;
while (pa != NULL && pb != NULL){
if (pa->data == pb->data){
op->nxt = pa;
pa = pa->nxt;
pb = pb->nxt;
op = op->nxt;
}
else if (pa->data < pb->data) pa = pa->nxt;
else pb = pb->nxt;
}
op->nxt = NULL;
return L;
}
int main(){
linklist la, lb, lc;
la = Read();
lb = Read();
lc = Common(la, lb);
lc = lc->nxt;
int flag = 0;
if (lc == NULL) printf("NULL");
else {
while (lc != NULL){
if (flag != 0) printf(" ");
printf("%d", lc->data);
flag = 1;
lc = lc->nxt;
}
}
return 0;
}