您的位置:首页 > 其它

链表归并

2016-07-26 19:09 246 查看

题目描述

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

输入

第一行输入M与N的值; 

第二行依次输入M个有序的整数;

第三行依次输入N个有序的整数。

输出

输出合并后的单链表所包含的M+N个有序的整数。
#include <stdio.h>

#include <stdlib.h>

struct node

{

    int data;

    struct node*next;

};

int main()

{

    int m,n,i;

    struct node*head1,*p,*head2,*q,*tail;

    scanf("%d %d",&m,&n);

    head1 = (struct node*)malloc(sizeof(struct node));

    head1->next = NULL;

    tail=head1;

    for(i=0; i<=m-1; i++)

    {

        p = (struct node*)malloc(sizeof(struct node));

        scanf("%d",&p->data);

        p->next=NULL;

        tail->next=p;

        tail=p;

    }

    head2 = (struct node*)malloc(sizeof(struct node));

    head2->next = NULL;

    tail=head2;

    for(i=0;i<=n-1;i++)

    {

       p = (struct node*)malloc(sizeof(struct node));

       scanf("%d",&p->data);

       p->next=NULL;

       tail->next=p;

       tail=p;

    }

    p=head1->next;

    q=head2->next;

    tail=head1;

    free(head2);

    while(p&&q)

    {

       if(q->data<=p->data)

       {

         tail->next=q;

         tail=q;

         q=q->next;

       }

       else

       {

           tail->next=p;

           tail=p;

           p=p->next;

       }

    }

    if(p!=NULL)

    {

       tail->next=p;

    }

    else

        tail->next=q;

    p=head1->next;

    while(p!=NULL)

    {

       if(p->next!=NULL)

        printf("%d ",p->data);

       else printf("%d",p->data);

       p=p->next;

    }

    return 0;

}

把head1和head2都分出来利用游动指针tail往head1后面加节点
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: