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

已知两个非降序链表序列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*)malloc(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;
}

猜你喜欢

转载自blog.csdn.net/hackq_sxj/article/details/78597456