数据结构实验之链表四:有序链表的归并

来源:互联网 发布:mac terminal 指令 编辑:程序博客网 时间:2024/06/06 13:09

数据结构实验之链表四:有序链表的归并

Time Limit: 1000MS Memory Limit: 65536KB
Submit Statistic

Problem Description

分别输入两个有序的整数序列(分别包含M和N个数据),建立两个有序的单链表,将这两个有序单链表合并成为一个大的有序单链表,并依次输出合并后的单链表数据。

Input

第一行输入M与N的值; 
第二行依次输入M个有序的整数;
第三行依次输入N个有序的整数。

Output

输出合并后的单链表所包含的M+N个有序的整数。

Example Input

6 51 23 26 45 66 9914 21 28 50 100

Example Output

1 14 21 23 26 28 45 50 66 99 100

Hint

不得使用数组!

Author

#include<iostream>#include<algorithm>using namespace std;typedef struct Linklist{    int data;    Linklist *next;}Linklist;Linklist *order_creat(Linklist *head, int n){    Linklist *p, *tail;    head=new Linklist;    head->next=NULL;    tail=head;    for(int i=0;i<n;++i)    {        p=new Linklist;        p->next=NULL;        cin>>p->data;        tail->next=p;        tail=p;    }    return head;}Linklist *reverse_creat(Linklist *head){    Linklist *p;    head=new Linklist;    head->next=NULL;    int x;    while(cin>>x&&x!=-1)    {        p=new Linklist;        p->data=x;        p->next=head->next;        head->next=p;    }    return head;}void display(Linklist *head){    Linklist *p;    p=head->next;    while(p->next)    {        cout<<p->data<<" ";        p=p->next;    }    cout<<p->data<<endl;}Linklist *meger(Linklist *head1, Linklist *head2){    Linklist *p, *q, *head3, *tail;    head3=new Linklist;    head3->next=NULL;    tail=head3;    p=head1->next;    q=head2->next;    while(p&&q)    {        if(p->data>=q->data)        {            tail->next=q;            tail=q;            q=q->next;        }        else        {            tail->next=p;            tail=p;            p=p->next;        }    }    if(p)    {        tail->next=p;    }    else    {        tail->next=q;    }    return head3;}int main(){    ios::sync_with_stdio(false);    Linklist *head1, *head2;    int n, m;    cin>>n>>m;    head1=order_creat(head1, n);    head2=order_creat(head2, m);    head1=meger(head1, head2);    display(head1);    return 0;}


0 0
原创粉丝点击