分别逆序输入两个有序链表,按从小到大的元素顺序组成一个新的链表,并输出这个链表。
#include<stdio.h> //分别逆序输入两个有序链表,按从小到大的元素顺序组成一个新的链表 #include<stdlib.h> //并输出这个链表 #define ERROR 0 #define OK 1 typedef int ElemType; typedef struct LNode{ ElemType data; struct LNode * next; }LNode, * LinkList; LinkList Combine(LinkList La,LinkList Lb,LinkList Lc); LinkList ListCreate_L(LinkList L,int n); int main(){ int i,m,n; LinkList La,Lb,Lc,p; scanf("%d %d",&m,&n); //分别输入两个链表长度m、n La=ListCreate_L(La,m); Lb=ListCreate_L(Lb,n); Lc=Combine(La,Lb,Lc); p=Lc->next; for(i=0;i<10;i++){ printf("%d ",p->data); p=p->next; } return 0; } LinkList Combine(LinkList La,LinkList Lb,LinkList Lc){ //顺序元素链表拼接 Lc=(LinkList)malloc(sizeof(LNode)); //按照从小到大元素顺序拼接 LinkList pa,pb,pc; pa=La->next; pb=Lb->next; Lc=La; //令拼接成的新链表头结点等于La头节点 pc=Lc; while(pa&&pb){ if(pa->data<=pb->data){ pc->next=pa; pc=pc->next; pa=pa->next; } else{ pc->next=pb; pc=pc->next; pb=pb->next; } } if(pa) //剩余部分拼接 pc->next=pa; else pc->next=pb; free(Lb); return Lc; } LinkList ListCreate_L(LinkList L,int n){ //逆序法输入n个元素,建立链表L int i; LinkList p; L=(LinkList)malloc(sizeof(LNode)); L->next=NULL; for(i=n;i>0;i--){ p=(LinkList) malloc(sizeof(LNode)); scanf("%d",&p->data); //输入元素值 p->next=L->next; L->next=p; } return L; }