两个有序链表序列的合并 (20 分)

版权声明:欢迎转载,但转载时请注明原文地址 https://blog.csdn.net/weixin_42110638/article/details/85208916

7-90 两个有序链表序列的合并 (20 分)

已知两个非降序链表序列S1与S2,设计函数构造出S1与S2合并后的新的非降序链表S3。

输入格式:

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

输出格式:

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

输入样例:

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

输出样例:

1 2 3 4 5 6 8 10

答案:

单链表实现

#include<iostream>
#include <bits/stdc++.h>

#define TRUE        1
#define FALSE       0
#define OK          1
#define ERROR       0
#define INFEASIBLE -1
#define OVERFLOW   -2

typedef int Elemtype;
typedef int Status;

typedef struct LNode
{
    Elemtype data;
    struct LNode *next;
} LNode,*LinkList;

Status List_Create(LinkList &CL)
{
    LinkList rear;
    CL = (LinkList)malloc(sizeof(LNode));
    if(!CL)
        exit(OVERFLOW);
    CL->next = NULL;
    rear = CL;// //初始时头结点为尾节点,rear指向尾巴节点
    //rear->next = NULL;
    int t;
    while(scanf("%d",&t))
    {
        if(t!=-1)
        {
            LinkList p = (LinkList)malloc(sizeof(LNode));
            p->data = t;
            rear->next = p;
            rear = p;
        }
        else
            break;
    }
    rear->next = NULL;
    return 0;
}


Status List_Merge(LinkList &L1,LinkList &L2,LinkList &L3)
{
    LinkList pa = L1->next,pb = L2->next,pc;
    L3 = pc = L1;
    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 = pc->next;
    }
    pc->next = pa?pa:pb;
    return OK;
}

void List_Print(LinkList &CL)
{
    LinkList p = CL->next;
    bool flag = true;
    if(!p)
        printf("NULL");
    else
    {
        while(p)
        {
            if(flag)
            {
                printf("%d",p->data);
                flag = false;
            }
            else
                printf(" %d",p->data);
            p = p->next;
        }
    }
}



int main()
{
    LinkList A,B,C;
    List_Create(A);
    List_Create(B);
    List_Merge(A,B,C);
    List_Print(C);
}

猜你喜欢

转载自blog.csdn.net/weixin_42110638/article/details/85208916