DS单链表--合并


题目描述

假定两个单链表是递增有序,定义并实现以下函数,完成两个单链表的合并,继续保持递增有序

int LL_merge(ListNode *La, ListNode *Lb)

输入

 

第1行先输入n表示有n个数据,接着输入n个数据
 
第2行先输入m表示有M个数据,接着输入m个数据
 

 

输出

输出合并后的单链表数据,数据之间用空格隔开

样例输入

3 11 33 55 4 22 44 66 88

样例输出

11 22 33 44 55 66 88

提示

#include<iostream>
using namespace std;
#define ok 0
#define error -1
class CNode
{
    int data;
    CNode *next;
public:
    CNode()
    {
        next=NULL;
    }
    CNode(int n,CNode *p)
    {
        data=n;
        next=p;
    }
    int getdata()
    {
        return data;
    }
    CNode *getnext()
    {
        return next;
    }
    void setnext(CNode *p)
    {
        next=p;
    }
};
 
 
class CList
{
    friend class CNode;
    CNode *head;
    int nodenumber;
public:
    CList()
    {
        head=NULL;
        nodenumber=0;
    }
    ~CList()
    {
        for(int i=0;i<nodenumber;i++)
        {
            CNode *p=head;
            head=head->getnext();
            delete p;
        }
    }
    void nodeplus()
    {
        nodenumber++;
    }
    void nodeminus()
    {
        nodenumber--;
    }
    void createTailList(int *num,int n)
    {
        CNode *tail;
        CNode *s;
        head=new CNode();
        tail=head;
        for(int i=0;i<n;i++)
        {
            s=new CNode(num[i],NULL);
            tail->setnext(s);
            tail=s;
            nodeplus();
        }
    }
    CNode *findreal(int i)
    {
        if(i<=0||i>nodenumber)
        {
            cout<<"error"<<endl;
            return NULL;
        }
        else
            return indexfind(i);
    }
    CNode *indexfind(int i)
    {
        if(i<0)
        {
            return NULL;
        }
        CNode *p=head;
        int k=1;
        while(k<=i&&p!=NULL)
        {
            p=p->getnext();
            k++;
        }
        return p;
    }
    int Insert(int i,int num)
    {
        if(i<=0||i>nodenumber+1)
        {
            cout<<"error"<<endl;
            return error;
        }
        nodeplus();
        CNode *p=indexfind(i-1);
        CNode *temp=new CNode(num,p->getnext());
        p->setnext(temp);
        return ok;
    }
    int Delete(int i)
    {
        if(i<1||i>nodenumber)
        {
            cout<<"error"<<endl;
            return error;
        }
        nodeminus();
        CNode *p=indexfind(i-1);
        CNode *temp=p->getnext();
        p->setnext(temp->getnext());
        delete temp;
        return ok;
    }
    void display()
    {
        CNode *p=head->getnext();
        while(p!=NULL)
        {
            cout<<p->getdata()<<" ";
            p=p->getnext();
        }
        cout<<endl;
    }
    void create()
    {
        head=new CNode();
        nodenumber=0;
    }
    friend CList beOne(CList &L1,CList &L2)
    {
        CList temp;
        temp.create();
        while(L1.head->getnext()!=NULL||L2.head->getnext()!=NULL)
        {
            if(L1.head->getnext()==NULL)
            {
                CNode *p=L2.head->getnext();
                temp.Insert(temp.nodenumber+1,p->getdata());
                L2.Delete(1);
            }
            else if(L2.head->getnext()==NULL)
            {
                CNode *p=L1.head->getnext();
                temp.Insert(temp.nodenumber+1,p->getdata());
                L1.Delete(1);
            }
            else
            {
                CNode *p1=L1.head->getnext();
                CNode *p2=L2.head->getnext();
                if(p1->getdata()<=p2->getdata())
                {
                    temp.Insert(temp.nodenumber+1,p1->getdata());
                    L1.Delete(1);
                }
                else if(p1->getdata()>p2->getdata())
                {
                    temp.Insert(temp.nodenumber+1,p2->getdata());
                    L2.Delete(1);
                }
            }
        }
        return temp;
    }
};
 
int main()
{
    int n;
    cin>>n;
    int *num1=new int[n];
    for(int i=0;i<n;i++)
    {
        cin>>num1[i];
    }
    CList L1;
    L1.createTailList(num1,n);
    cin>>n;
    int *num2=new int[n];
    for(int i=0;i<n;i++)
    {
        cin>>num2[i];
    }
    CList L2;
    L2.createTailList(num2,n);
    beOne(L1,L2).display();
    delete []num1;
    delete []num2;
    return 0;
}


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM