链表的合并
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int data;
struct node * next;
}node;
void reverse(node *head) {
node *p = head->next;
node *n;
head->next = NULL;
while(p != NULL) {
n = p;
p = p->next;
n->next = head->next;
head->next = n;
}
}
void insert(node *head, int data) {
node *tmp = (node *) malloc(sizeof(node));
tmp->data = data;
tmp->next = head->next;
head->next = tmp;
};
int main() {
node *heada= (node *)malloc(sizeof(node));
heada->next = NULL;
node *headb = (node *)malloc(sizeof(node));
headb->next = NULL;
node *headc = (node *)malloc(sizeof(node));
headc->next = NULL;
while(1) {
int number = 0;
scanf("%d", &number);
if (number == -1) {
break;
} else {
insert(heada, number);
}
}
while(1) {
int number = 0;
scanf("%d", &number);
if (number == -1) {
break;
} else {
insert(headb, number);
}
}
reverse(heada);
reverse(headb);
node *p = heada->next;
node *q = headb->next;
while(p != NULL && q != NULL) {
if (p->data > q->data) {
insert(headc, q->data);
q = q->next;
} else {
insert(headc, p->data);
p = p->next;
}
}
while(p != NULL) {
insert(headc, p->data);
p = p->next;
}
while(q != NULL) {
insert(headc, q->data);
q = q->next;
}
reverse(headc);
node *r = headc->next;
if (r == NULL) {
printf("NULL");
} else {
while(r != NULL) {
printf("%d", r->data);
r = r->next;
if (r != NULL) {
printf(" ");
}
}
}
return 0;
}