///新建了一个头结点
#include <stdio.h> #include <stdlib.h> typedef int Elemtype; typedef struct Lnode { Elemtype data; struct Lnode *next; }Lnode, *Linklist; void Create(Linklist *L1) { Lnode *p, *q; int n, x, i; *L1=(Linklist)malloc(sizeof(Lnode)); (*L1)->next=NULL; q=*L1; scanf("%d", &n); for(i=0; i<n; i++) { p=(Lnode *)malloc(sizeof(Lnode)); scanf("%d", &x); p->data=x; q->next=p; q=p; } q->next=NULL; } void Merge(Linklist L1,Linklist L2, Linklist *L) { Lnode *p1, *p2, *p3; p1=L1->next; p2=L2->next; *L=(Linklist)malloc(sizeof(Lnode)); p3=*L; p3->next=NULL; while(p1 && p2) { if(p1->data < p2->data) { p3->next=p1; p3=p3->next; p1=p1->next; } else { p3->next=p2; p3=p3->next; p2=p2->next; } } p3->next=p1?p1:p2; } void TarverseList(Linklist L) { Lnode *p=L->next; if(L->next==NULL) printf("NULL\n"); while(p) { printf("%d ", p->data); p=p->next; } printf("\n"); } int main() { Linklist L1, L2, L; Create(&L1); Create(&L2); Merge(L1, L2, &L); TarverseList(L); return 0; }
/// 没有新建头结点,利用其中L1或L2的头结点
#include <stdio.h> #include <stdlib.h> typedef int Elemtype; typedef struct Lnode { Elemtype data; struct Lnode *next; }Lnode, *Linklist; void Create(Linklist *L1) { Lnode *p, *q; int n, x, i; *L1=(Linklist)malloc(sizeof(Lnode)); (*L1)->next=NULL; q=*L1; scanf("%d", &n); for(i=0; i<n; i++) { p=(Lnode *)malloc(sizeof(Lnode)); scanf("%d", &x); p->data=x; q->next=p; q=p; } q->next=NULL; } void Merge(Linklist *L1,Linklist *L2, Linklist *L) { Lnode *p1, *p2, *p3; p1=(*L1)->next; p2=(*L2)->next; *L=p3=*L1; while(p1 && p2) { if(p1->data < p2->data) { p3->next=p1; p3=p3->next; p1=p1->next; } else { p3->next=p2; p3=p3->next; p2=p2->next; } } p3->next=p1?p1:p2; free(*L2); } void TarverseList(Linklist L) { Lnode *p=L->next; if(L->next==NULL) printf("NULL\n"); while(p) { printf("%d ", p->data); p=p->next; } printf("\n"); } int main() { Linklist L1, L2, L; Create(&L1); Create(&L2); Merge(&L1, &L2, &L); TarverseList(L); return 0; }