关闭

5-51 两个有序链表序列的合并 (20分)

1010人阅读 评论(0) 收藏 举报
分类:

5-51 两个有序链表序列的合并 (20分)

已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的并集新非降序链表S3。
输入格式:

输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1-不属于这个序列)。数字用空格间隔。
输出格式:

在一行中输出合并后新的非降序链表,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出NULL。
输入样例:

1 3 5 -1
2 4 6 8 10 -1

输出样例:

1 2 3 4 5 6 8 10

思路
生成两个链表,合并输出
点击访问 PTA-测验

#include<stdlib.h>
#include<stdio.h>
/*

时间                  结果  得分  题目  编译器 用时(ms)内存(MB)用户
2016-03-26 19:32    答案正确      20    5-52  gcc  416  31  569985011
测试点 结果  得分/满分   用时(ms)内存(MB)
测试点1    答案正确      10/10    2  1
测试点2    答案正确      1/1    1  1
测试点3    答案正确      3/3    1  1
测试点4    答案正确      3/3    2  1
测试点5    答案正确      1/1    13  1
测试点6    答案正确      2/2    416  31
*/
typedef struct node *Node;
struct node {
    int Data;
    Node Next;
} ;

Node Scan(void);

int main() {
    Node Link1=Scan();
    Node Link2=Scan();
    int flag=0;
    while(Link1&&Link2) {
        if(Link1->Data >Link2->Data) {
            if(flag)printf(" ");
            else flag=1;
            printf("%d",Link2->Data );
            Link2=Link2->Next ;
        } else {
            if(flag)printf(" ");
            else flag=1;
            printf("%d",Link1->Data );
            Link1=Link1->Next ;
        }
    }
    while(Link1) {
        if(flag)printf(" ");
        else flag=1;
        printf("%d",Link1->Data );
        Link1=Link1->Next ;
    }
    while(Link2) {
        if(flag)printf(" ");
        else flag=1;
        printf("%d",Link2->Data );
        Link2=Link2->Next ;
    }
    if(!flag)printf("NULL");
    return 0;
}

Node Scan(void) {
    struct node head;
    Node U=&head;
    head.Next =NULL;
//  head.Data =-1;
    int num ;
    while(1) {
        scanf("%d",&num);
        if(num!=-1) {

            U->Next =(Node)malloc(sizeof(struct node));
            U->Next ->Data =num;
            U=U->Next ;

        } else break;
    }
    U->Next =NULL;
    return head.Next ;
}
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    文章分类
    最新评论