链表——两个有序链表序列的合并

已知两个非降序链表序列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<bits/stdc++.h>
using namespace std;
#define OK 1
#define ERROR 0
typedef int Status;
typedef int ElemType;
typedef struct LNode *List;
typedef struct LNode
{
    ElemType data;
    struct LNode *next;
} LNode,*LinkList;

Status InitList(LinkList &L)
{
    L = new LNode;
    L -> next = NULL;
    return OK;
}
Status IsEmpty(LinkList &L)
{
    if(L == NULL || L -> next == NULL)
    {
        return OK;
    }
    else
        return ERROR;
}
Status CreatList(LinkList &L)
{
    LNode *p,*q;
    L = new LNode;
    L ->next = NULL;
    p = L;//指向链表头结点
    q = new LNode;//新结点
    ElemType e;
    cin>>e;
    while(e != -1)
    {
        q -> data = e;//新结点赋值e
        q -> next = NULL;//将next置空
        p -> next = q;//链表指向新结点,后插法
        p = q;
        q = new LNode;
        cin>>e;//输入直到-1
    }
}
void PrintList(LinkList &L)
{
    LNode *p = L ->next;
    while(p)
    {
        if(p -> next == NULL)
        {
            cout<<p -> data<<endl;
        }
        else
            cout<<p -> data<<" ";
        p = p -> next;
    }
}
Status MergeList(LinkList &L1,LinkList &L2,LinkList &L3)
{
    LNode *p1 = L1 -> next;
    LNode *p2 = L2 -> next;
    L3 = L1;//L1头结点作为L3头结点
    LNode *p3 = L3;
    while(p1 && p2)
    {
        if(p1->data < p2 -> data)
        {
            p3 -> next = p1;
            p3 = p1;
            p1 = p1 -> next;
        }
        else
        {
            p3 -> next = p2;
            p3 = p2;
            p2 = p2 -> next;
        }
    }
    p3 -> next = p1 ? p1 :p2;//若有一个未到达末尾直接接到L3
    delete L2;
}
int main()
{
    LinkList L1,L2,L3;
    InitList(L1);
    InitList(L2);
    InitList(L3);

    CreatList(L1);
    CreatList(L2);
    MergeList(L1,L2,L3);
    if(IsEmpty(L3))
    {
        cout<<"NULL"<<endl;
    }
    else
        PrintList(L3);
}




猜你喜欢

转载自blog.csdn.net/Yolanda_Salvatore/article/details/78851020
今日推荐