双指针:
#include <stdio.h>
#include <stdlib.h>
typedef struct list {
int data;
struct list *next;
} list;
list* CreatList() { //创建链表
list *head = NULL, *tail = NULL;
int n;
scanf("%d", &n);
while (n != -1){
list *p = NULL;
p = (list*)malloc(sizeof(list));
p->data = n;
if (head == NULL) {
head = p;
tail = p;
} else {
tail->next = p;
tail = p;
}
tail->next = NULL;
scanf("%d", &n);
}
return head;
}
list* MergeList(list* head1, list* head2) {
list *head=NULL,*tail=NULL,*p=NULL;
while(head1 && head2){
if(head1->data < head2->data) {
head1 = head1->next;
}else if(head2->data < head1->data){
head2 = head2->next;
}else{
p = (list*)malloc(sizeof(list));
p->data = head1->data;
if(head==NULL){
head = p;
tail = p;
}else{
tail->next = p;
tail = p;
tail->next = NULL;
}
head1 = head1->next;
head2 = head2->next;
}
}
return head;
}
int main() {
list *head1 = NULL;
head1 = CreatList();
list *head2 = NULL;
head2 = CreatList();
list* head = MergeList(head1, head2);
if(head == NULL){
printf("NULL");
}else{
while(head){
printf("%d",head->data);
if(head->next){
printf(" ");
}
head = head->next;
}
}
return 0;
}