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

来源:互联网 发布:mac系统偏好设置 红点 编辑:程序博客网 时间:2024/06/07 19:39

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
 
 

#include<stdio.h>#include<stdlib.h>struct node{    int num;    struct node *next;};struct node * create(int n){    struct node *head,*tail,*p;    head=(struct node *) malloc (sizeof(struct node ));    head->next=NULL;    tail=head;    while(n--)    {        p=(struct node *) malloc (sizeof(struct node ));        scanf("%d",&p->num);        tail->next=p;        p->next=NULL;        tail=p;    }    return (head);}struct node * merge (struct node *head1, struct node*head2){    struct node *tail, *p, *q;    p=head1->next;    q=head2->next;    head1->next=NULL;    tail=head1;    free(head2);    while(p&&q)    {        if(p->num<q->num)        {            tail->next=p;            tail=p;            p=p->next;            tail->next=NULL;        }        else        {            tail->next=q;            tail=q;            q=q->next;            tail->next=NULL;        }    }    if(p)    {        tail->next=p;    }    else    {        tail->next=q;    }    return head1;}void show(struct node *head){    struct node *p;    p=head->next;    while(p->next!=NULL)    {        printf("%d ",p->num);        p=p->next;    }    printf("%d",p->num);}int main(){    int n,m;    struct node *head1,*head2;    scanf("%d%d",&n,&m);    head1=create(n);    head2=create(m);    head1=merge(head1,head2);    show(head1);    return ;}

 

0 0
原创粉丝点击