假设有两个按元素值递增次序排列的线性表,均已单链表的形式存储请编写算法将这两个单链表归并为一个按元素值递减次序排列的单链表并要求利用原来两个单链表的结点存放归并后的单链表
#include<stdio.h>
#include<stdlib.h>
typedef struct LNode {
int data;
struct LNode *next;
} LNode, *LinkList;
void Merge(LinkList &A, LinkList &B){
LNode *pa=A->next,*pb=B->next;
A->next = NULL;
LNode *ra,*rb;
while(pa!=NULL&&pb!=NULL){
if(pa->data<pb->data){
ra=pa->next;
pa->next = A->next;
A->next = pa;
pa=ra;
}else{
rb=pb->next;
pb->next = A->next;
A->next = pb;
pb = rb;
}
}
while(pa!=NULL){
ra = pa->next;
pa->next = A->next;
A->next = pa;
pa = ra;
}
while(pb!=NULL){
rb = pb->next;
pb->next = A->next;
A->next = pb;
pb = rb;
}
free(B);
}
LinkList List_TailInsert(LinkList &L) {
int x;
L=(LinkList)malloc(sizeof(LNode));
L->data=999999;
LNode *s, *r=L;
printf("请输入数值\n");
scanf("%d",&x);
while(x!=9999) {
s=(LNode *)malloc(sizeof(LNode));
s->data = x;
r->next = s;
r=s;
scanf("%d",&x);
}
r->next = NULL;
return L;
}
void print(LinkList L) {
printf("\n");
if(L->next==NULL)
printf("该链表为空");
LNode *p= L->next;
while(p!=NULL) {
printf("%d ",p->data);
p=p->next;
}
}
int main() {
LinkList A,B;
int x;
List_TailInsert(A);
List_TailInsert(B);
print(A);
print(B);
Merge(A,B);
print(A);
return 0;
}
运行结果
![在这里插入图片描述](https://img-blog.csdnimg.cn/7fd69f3d08e4475ba2f3be840bb3cc1e.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6ZW_5rGf5biI6IyD5a2m6ZmiMTjnuqfkupHorqHnrpcx54-tQ1blt6XnqIvluIg=,size_15,color_FFFFFF,t_70,g_se,x_16)