7-51 两个有序链表序列的合并 (20分)
AC代码
#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
#include <cstdlib>
using namespace std;
typedef struct node{
int data;
struct node *nxt;
}node, *linklist;
linklist Read(){
linklist L, op;
L = (linklist)malloc(sizeof(node));
L->data = -1;
L->nxt = NULL;
op = L;
int data;
scanf("%d", &data);
while (data != -1){
linklist tmp = (linklist)malloc(sizeof(node));
tmp->nxt = NULL;
tmp->data = data;
op->nxt = tmp;
op = op->nxt;
scanf("%d", &data);
}
return L;
}
linklist Merge(linklist la, linklist lb){
linklist L, pa, pb, op;
L = (linklist)malloc(sizeof(node));
L->data = -1;
L->nxt = NULL;
op = L;
pa = la->nxt;
pb = lb->nxt;
while (pa != NULL && pb != NULL){
if (pa->data <= pb->data){
op->nxt = pa;
pa = pa->nxt;
}
else {
op->nxt = pb;
pb = pb->nxt;
}
op = op->nxt;
}
while (pa != NULL){
op->nxt = pa;
pa = pa->nxt;
op = op->nxt;
}
while (pb != NULL){
op->nxt = pb;
pb = pb->nxt;
op = op->nxt;
}
op->nxt = NULL;
return L;
}
int main(){
linklist la, lb, lc;
la = Read();
lb = Read();
lc = Merge(la, lb);
linklist p = lc->nxt;
if (p == NULL){
printf("NULL");
return 0;
}
int flag = 0;
while (p != NULL){
if (flag != 0) printf(" ");
printf("%d", p->data);
flag = 1;
p = p->nxt;
}
return 0;
}
来源:CSDN
作者:Supremebeast3_
链接:https://blog.csdn.net/weixin_43359312/article/details/103570726