已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的交集新链表S3。
#include <stdio.h>
#include <stdlib.h>
typedef struct LNode{
int data;
struct LNode *next;
}LNode, *List;
void create(List *L) {
List head = NULL, p, tail;
int x;
scanf("%d", &x);
while(x != -1) {
p = (struct LNode*)malloc(sizeof(struct LNode));
p->data = x;
p->next = NULL;
if(head == NULL) head = p;
else tail->next = p;
tail = p;
scanf("%d", &x);
}
*L = head;
}
List merge(List L1, List L2) {
List head = NULL, p, tail;
while(L1 && L2) {
if(L1->data < L2->data) L1 = L1->next;
else if (L1->data > L2->data) L2 = L2->next;
else {
p = (struct LNode*)malloc(sizeof(struct LNode));
p->data = L1->data;
p->next = NULL;
if(head == NULL) head = p;
else tail->next = p;
tail = p;
L1 = L1->next;
L2 = L2->next;
}
}
return head;
}
void print(List l){
if(l == NULL) {
printf("NULL");
return;
}
while(l) {
if(l->next != NULL)
printf("%d ",l->data);
else
printf("%d",l->data);
l = l->next;
}
}
int main(){
List L1, L2, l;
create(&L1);
create(&L2);
l = merge(L1,L2);
print(l);
return 0;
}