题目1519:合并两个排序的链表 九度 本地通过 参考别人的

来源:互联网 发布:淘宝直通车怎么进入 编辑:程序博客网 时间:2024/05/29 18:02

题目1519:合并两个排序的链表
时间限制:1 秒内存限制:128 兆特殊判题:否提交:1681解决:770
题目描述:
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
(hint: 请务必使用链表。)
输入:
输入可能包含多个测试样例,输入以EOF结束。
对于每个测试案例,输入的第一行为两个整数n和m(0<=n<=1000, 0<=m<=1000):n代表将要输入的第一个链表的元素的个数,m代表将要输入的第二个链表的元素的个数。
下面一行包括n个数t(1<=t<=1000000):代表链表一中的元素。接下来一行包含m个元素,s(1<=t<=1000000)。
输出:
对应每个测试案例,
若有结果,输出相应的链表。否则,输出NULL。
样例输入:
5 2
1 3 5 7 9
2 4
0 0
样例输出:
1 2 3 4 5 7 9
NULL

#include<iostream>#include<stdio.h>#include<string>#include<math.h>#include<map>               #include<vector>#include<assert.h>using namespace std;struct node{    int val;    node *next;    node(int val)    {        this->val=val;        this->next=NULL;    }    node()    {        this->val=0;        this->next=NULL;    }};int main(){//  assert(freopen("text.txt","r",stdin));    int n,m;    cin>>n>>m;    if(n==0&&m==0)    {        cout<<"NULL"<<endl;        return 0;    }    node *fp=new node();    cin>>fp->val;    node *fHead=fp;    for(int i=1;i<n;i++)    {        node *p=new node();        p->next=NULL;        fp->next=p;        fp=p;    }    node *sp=new node();    cin>>sp->val;    node *sHead=sp;    for(int i=1;i<m;i++)    {        node *p=new node();        p->next=NULL;        cin>>p->val;        sp->next=p;        sp=p;    }    fp=fHead;    sp=sHead;    cout<<fp->val<<" "<<sp->val<<endl;    node *rHead=new node();    node *rp=rHead;    node *fNext=NULL,*sNext=NULL;    while(fp&&sp)    {        fNext=fp->next;        sNext=sp->next;        if(fp->val<=sp->val)        {            fp->next=NULL;            rp->next=fp;            rp=fp;            fp=fNext;        }        else        {            sp->next=NULL;;            rp->next=sp;            rp=sp;            sp=sNext;        }    }    if(fp)    rp->next=fp;    if(sp)    rp->next=sp;    rp=rHead->next;    for(int i=0;i<n+m-1;i++)    {    cout<<rp->val<<" ";    rp=rp->next;    }    cout<<rp->val<<endl;    return 0;}
0 0
原创粉丝点击