分别逆序输入两个有序链表,按从小到大的元素顺序组成一个新的链表,并输出这个链表。
#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;
}