两个有序链表序列的合并

来源:互联网 发布:老婆胸大的体验知乎 编辑:程序博客网 时间:2024/04/27 18:57

两个有序链表序列的合并

#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 a,n,i;    List L,p,r;    L = (List)malloc(sizeof(struct Node));    L->Next = NULL;    r = L;     scanf("%d",&n);    if(n)    {        for(i=1;i<=n;i++)        {            scanf("%d",&a);            p=(List)malloc(sizeof(struct Node));            p->Data = a;            r->Next = p;            r = p;        }    }    r->Next = NULL;    return L;}void Print( List L ){    List p;    p = L->Next;    if(!p)    {        printf("NULL");    }    else    {        while(p)        {            printf("%d ",p -> Data);            p = p -> Next;         }    }    printf("\n");}List Merge( List L1, List L2 ){    List p,l1,l2,l;    l=(List)malloc(sizeof(struct Node));    l1=L1->Next;    l2=L2->Next;    p = l;    while(l1 && l2)    {        if(l1->Data <= l2->Data)        {            p->Next = l1;            p = l1;            l1 = l1->Next;        }        else        {            p->Next = l2;            p = l2;            l2 = l2->Next;        }    }    p->Next = l1 ? l1:l2;    L1->Next = NULL;    L2->Next = NULL;    return l;}
原创粉丝点击