您的位置:首页 > 理论基础 > 数据结构算法

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

2016-08-01 11:08 351 查看


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




Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^



题目描述

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


输入

第一行输入M与N的值; 

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

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


输出

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


示例输入

6 5
1 23 26 45 66 99
14 21 28 50 100



示例输出

1 14 21 23 26 28 45 50 66 99 100



提示

不得使用数组!

#include <stdio.h>

#include <stdlib.h>

typedef  struct  LNode

{

    LNode *next;

    int data;

} LNode,*linklist;

linklist CreateList(linklist L,int h){

   LNode *p,*q,*tail; int i;

    L=(linklist)malloc(sizeof(LNode));

    L->next=NULL;

    tail=L;

    for(i=0;i<h;i++){

        p=(linklist )malloc(sizeof(LNode));

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

        p->next=NULL;

        tail->next=p;

        tail=p;

    }

    return L;

}

linklist combine(LNode *L1,LNode *L2,LNode *L3)

{

    LNode *p1,*q1,*p2,*q2,*tail;

    L3=(linklist)malloc(sizeof(LNode));

    L3->next=NULL;

    tail=L3;

    p1=L1->next;

    p2=L2->next;

    while(p1!=NULL&&p2!=NULL){    //  从两个表的开头比较小的节点连在新表后面

        if(p1->data<=p2->data){ //

            q1=p1->next; //

            tail->next=p1; //

            p1->next=NULL; //

            tail=tail->next;

            p1=q1;

        }

        else{

            q2=p2->next;

            tail->next=p2;

            p2->next=NULL;

            tail=tail->next;

            p2=q2;

        }

    }

    if(p1==NULL&&p2!=NULL) //其中一个表空后,直接把另一个链表接在新表后面

    {

        tail->next=p2;

    }

    if(p2==NULL&&p1!=NULL)

    {

        tail->next=p1;

    }

    return L3;

}

int main(){

    int n,m;

    LNode *l1,*l2,*l3,*p;

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

    l1=CreateList(l1,n);

    l2=CreateList(l2,m);

    l3=combine(l1,l2,l3);

    p=l3->next;

        while(p!=NULL){

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

            p=p->next;

        }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: