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

来源:互联网 发布:input type file js 编辑:程序博客网 时间:2024/06/07 16:47

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

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

不得使用数组!
需要注意的一种情况就是其中一个链表没有完全遍历完,此时需要在退出循环的时候再从新表的最后加上没有被遍历的数据,比如数据
5 3
4 5 6 7 8
1 2 3
#include<stdio.h>#include<stdlib.h>typedef struct node{    int data;    struct node *next;}*linkList;void creatList(linkList &L,int n){    struct node *p, *tail;    L =new node;    tail = L;    for(int i = 0; i < n; i++){        p = (struct node*)malloc(sizeof(struct node));        scanf("%d", &p->data);        p->next = NULL;        tail->next = p;        tail = p;    }};void outputData(linkList &L){struct node *p;p = L->next;    while(p){    if(p->next == NULL)    printf("%d\n", p->data);    else         printf("%d ", p->data);        p = p->next;    }}linkList guibing(linkList &La, linkList &Lb){linkList tail, p1, p2;    p1=La->next;    p2=Lb->next;    tail=La;    free(Lb);    while(p1&&p2)        if(p1->data<p2->data)    {        tail->next=p1;        tail=p1;        p1=p1->next;    }    else    {        tail->next=p2;        tail=p2;        p2=p2->next;    }    if(p1)        tail->next=p1;    else        tail->next=p2;    return La;}int main(){    int m, n;    scanf("%d %d", &m, &n);    linkList La, Lb, L;    creatList(La, m);    creatList(Lb, n);    L = guibing(La, Lb);    outputData(L);    return 0;}


阅读全文
0 0
原创粉丝点击