02-线性结构1 两个有序链表序列的合并 (15分)

来源:互联网 发布:淘宝设计工作室好做吗 编辑:程序博客网 时间:2024/04/30 06:53
本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个递增的整数序列。

函数接口定义:

List Merge( List L1, List L2 );
其中List结构定义如下:
typedef struct Node *PtrToNode;
struct Node {
    ElementType Data; /* 存储结点数据 */
    PtrToNode   Next; /* 指向下一个结点的指针 */
};
typedef PtrToNode List; /* 定义单链表类型 */
L1和L2是给定的带头结点的单链表,其结点存储的数据是递增有序的;函数Merge要将L1和L2合并为一个递增的整数序列。应直接使用原序列中的结点,返回归并后的链表头指针。
裁判测试程序样例:


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


typedef int ElementType;
typedef struct Node *PtrToNode;
struct Node {
    ElementType Data;
    PtrToNode   Next;
};
typedef PtrToNode List;


List Read(); /* 细节在此不表 */
void Print( List L ); /* 细节在此不表;空链表将输出NULL */


List Merge( List L1, List L2 );


int main()
{
    List L1, L2, L;
    L1 = Read();
    L2 = Read();
    L = Merge(L1, L2);
    Print(L);
    Print(L1);
    Print(L2);
    return 0;
}


/* 你的代码将被嵌在这里 */
输入样例:


3
1 3 5
5
2 4 6 8 10
输出样例:


1 2 3 4 5 6 8 10 
NULL
NULL
 
编译器:gcc
时间限制:400ms
内存限制:64MB
代码长度限制:16kB
判题程序:系统默认
作者:DS课程组
单位:浙江大学


题目判定
解题程序


对于这道题,我实在不知道说什么好了...也许是一直刷题的影响吧,程序一敲好,就立马 复制,粘贴 提交,根本不好好读题,看清楚这道题是让你干啥!!!
只要求你写合并函数就好了!!!
List Merge( List L1, List L2 );
就只提交这个函数的代码即可!  苦逼的我在确认代码无误后狂交了N+N次,才发现,原来之提交那么一丁点儿,注意的是你所用的变量名称要对的上他写的那一部分代码!


然后:附上我的代码吧。。。

#include <stdio.h>#include <stdlib.h>typedef int ElementType;typedef struct Node *PtrToNode;struct Node {    ElementType Data;    PtrToNode   Next;};typedef PtrToNode List;List Read(); /* 细节在此不表     (也就是说提交的时候可以不考虑,不过还是要写的!)    */void Print( List L ); /* 细节在此不表;空链表将输出NULL   (同上)*/List Merge( List L1, List L2 );int main(){    List L1, L2, L;    L1 = Read();    L2 = Read();    L = Merge(L1, L2);    Print(L);    Print(L1);    Print(L2);    return 0;}/* 你的代码将被嵌在这里 */List Read(){    int n;    scanf("%d",&n);    List L=(List)malloc(sizeof(PtrToNode));   ///申请一个头结点    L->Next = NULL;        ///头指针为空    if(n)    ///当n不是0时    {        List r=L;     ///r是一个中间变量的节点        for(int i=0;i<n;i++)         {            List p=(List)malloc(sizeof(struct Node));            scanf("%d",&(p->Data));    ///尾插法            r->Next = p;            r = p;        }        r->Next = NULL;             }    return L;}void Print( List L ){   List p=L->Next;   if(p)   {       List r;       r = L;       while(r->Next)       {           r = r->Next;           printf("%d ",r->Data);       }   }   else   {       printf("NULL");   }   printf("\n");}List Merge( List L1, List L2 )   ///合并函数  重点要写的函数!{    List pa,pb,pc,L;    L = (List)malloc(sizeof(struct Node));    pa=L1->Next;    pb=L2->Next;    pc = L;    while(pa && pb)    {        if(pa->Data <= pb->Data)        {            pc->Next = pa;            pc = pa;            pa = pa->Next;        }        else        {            pc->Next = pb;            pc = pb;            pb = pb->Next;        }    }    pc->Next = pa ? pa : pb;    L1->Next = NULL;    L2->Next = NULL;    return L;}


1 0
原创粉丝点击