zoukankan      html  css  js  c++  java
  • 7-15 两个有序链表序列的合并(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
    

    代码:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    typedef struct Node *Node;
    struct Node
    {
        int data;
        Node Next;
    };
    Node CList()
    {
        int d;
        Node head = (Node)malloc(sizeof(struct Node)),q;
        head -> Next = NULL;
        q = head;
        while(~scanf("%d",&d)&&d!=-1)
        {
            Node p = (Node)malloc(sizeof(struct Node));
            p -> data = d;
            p -> Next = NULL;
            q -> Next = p;
            q = p;
        }
        return head;
    }
    Node Merge(Node a,Node b)
    {
        a = a -> Next;
        b = b -> Next;
        Node head = (Node)malloc(sizeof(struct Node));
        head -> Next = NULL;
        Node q = head;
        while(a || b)
        {
            Node p = (Node)malloc(sizeof(struct Node));
            p -> Next = NULL;
            if(a == NULL || a -> data > b -> data)
            {
                p -> data = b -> data;
                b = b -> Next;
                q -> Next = p;
                q = p;
            }
            else
            {
                p -> data = a -> data;
                a = a -> Next;
                q -> Next = p;
                q = p;
            }
        }
        return head;
    }
    void printL(Node a)
    {
        a = a -> Next;
        if(a == NULL)printf("NULL");
        int flag = 0;
        while(a)
        {
            if(flag)printf(" %d",a -> data);
            else printf("%d",a -> data);
            a = a -> Next;
            flag = 1;
        }
    }
    int main()
    {
        Node a = CList();
        Node b = CList();
        Node c = Merge(a,b);
        printL(c);
    }
  • 相关阅读:
    C#多线程的简单理解
    CSS中图片水平垂直居中方法小结
    浅析JavaScript的prototype
    记kkpager分页控件的使用
    面试必问的 volatile
    观察者模式——从JDK到Spring
    Java 内存模型都不会,就敢在简历上写熟悉并发编程吗
    工厂模式,就这一篇搞定
    JVM解毒——类加载子系统
    JVM解毒——JVM与Java体系结构
  • 原文地址:https://www.cnblogs.com/8023spz/p/7702580.html
Copyright © 2011-2022 走看看