您的位置:首页 > 其它

7-1 两个有序链表序列的合并

2017-11-21 21:57 330 查看
已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的并集新非降序链表S3。


输入格式:

输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−表示序列的结尾(−不属于这个序列)。数字用空格间隔。


输出格式:

在一行中输出合并后新的非降序链表,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出
NULL


输入样例:

1 3 5 -1
2 4 6 8 10 -1


输出样例:

1 2 3 4 5 6 8 10

//库函数头文件包含
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>

//函数状态码定义
#define TRUE        1
#define FALSE       0
#define OK          1
#define ERROR       0
#define INFEASIBLE -1
#define OVERFLOW   -2

typedef int  Status;
typedef int ElemType;

//链表的定义
typedef struct LNode{
ElemType data;
struct LNode* next;
}LNode, *LinkList;

Status PrintList_L(LinkList L); //输出链表
Status CreateList_L(LinkList &L); //链表的创建
LinkList MergeList_L(LinkList &La, LinkList &Lb);//链表合并

int main(){
LinkList La, Lb, L;
CreateList_L(La);
CreateList_L(Lb);
L = MergeList_L(La, Lb);
PrintList_L(L);
return 0;
}

Status CreateList_L(LinkList &L)//链表的创建
{
LinkList rearPtr, curPtr;
L = (LNode*)mallo
4000
c(sizeof(LNode));
if(!L) exit(OVERFLOW);
L->next = NULL;
rearPtr = L;
int e;
while(scanf("%d", &e)&&e != -1){
curPtr = (LNode*)malloc(sizeof(LNode));
if(!curPtr) exit(OVERFLOW);
curPtr->data = e;
curPtr->next = NULL;
rearPtr->next = curPtr;
rearPtr = curPtr;
}
return OK;
}

LinkList MergeList_L(LinkList &La, LinkList &Lb)//链表合并
{
LinkList pa, pb, pc, L;
L = (LNode*)malloc(sizeof(LNode));
pa = La->next;
pb = Lb->next;
pc = L;
while(pa&&pb){
if(pa->data <= pb->data){
pc->next = pa;
pc = pa;
pa = pa->next;
}
else{
pc->next = pb;
pc = pb;
pb = pb->next;
}
}
pc->next = pa?pa:pb;
La->next = NULL;
Lb->next = NULL;
return L;
}

Status PrintList_L(LinkList L) //输出链表
{
int i = 0;
LNode* p = L->next;
if(p->next == NULL) printf("NULL");
while(p){
if(i == 0) printf("%d", p->data);
else printf(" %d", p->data);
i++;
p = p->next;
}
printf("\n");
return OK;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: