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

来源:互联网 发布:网络四大神兽 编辑:程序博客网 时间:2024/04/30 06:50

7-1 两个有序链表序列的合并(20 分)
#include<iostream>#include<malloc.h>#define OK 1#define ERROR 0#define OVERFLOW -1using namespace std;typedef int Status;typedef int ElemType;typedef struct LNode{    ElemType data;    struct LNode* next;} LNode, *LinkList;Status InitList(LinkList& L){    L = new LNode;    if(!L)        exit(OVERFLOW);    L->next = NULL;    return OK;}Status InsertList(LinkList& L){    LNode* p = L;    int num;    while(1)    {        cin >> num;        if(num == -1)        {            break;        }        else        {            LNode* r;            r = new LNode;            r->data = num;            r->next = p->next;            p->next = r;            p = r;        }    }    return OK;}void PrintList(LinkList& L){    LNode* p = L->next;    if(!p)        cout << "NULL";    /*else    {        cout << p->data;        p = p->next;        while(p)        {           cout << p->data;           p = p->next;        }    }*/    else    {        while(p!=NULL)        {            if(p->next!= NULL)                cout << p->data << " ";            else                cout << p->data;            p=p->next;        }    }}Status getMerge(LinkList& L1,LinkList& L2, LinkList& L3){    LNode* p = L1->next, *q = L2->next;    L3 = L1;    LNode *r = L3;    while(p && q)    {        if(p->data <= q->data)        {            r->next = p;            r = p;            p = p->next;        }        else        {            r->next = q;            r = q;            q = q->next;        }    }    r->next = p ? p : q;    /*    while(p && q)    {        if(p->data >= q->data)        {            LNonde* s = q->next, *tmp = r ->next;            r->next = q;        }        else {            LNode* s;            s->data = p->data;            s->next = r->next;            r->next = s;            r = s;            p = p->next;        }    }    while(p)    {        LNode *s;        s = new LNode;       s->data = p->data;            s->next = r->next;            r->next = s;            r = s;            p = p->next;    }    while(q)    {        LNode* s;            s->data = q->data;            s->next = r->next;            r->next = s;            r = s;            q = q->next;    }*/    return OK;}int main(){    LinkList L1, L2, L3;    InitList(L1);    InitList(L2);    InitList(L3);    InsertList(L1);    InsertList(L2);   getMerge(L1, L2, L3);   PrintList(L3);}

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

输入格式:

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

输出格式:

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

输入样例:

1 3 5 -12 4 6 8 10 -1

输出样例:

1 2 3 4 5 6 8 10
原创粉丝点击