02-线性结构1 两个有序链表序列的合并【链表】

来源:互联网 发布:mac 快捷键设置没有用 编辑:程序博客网 时间:2024/06/04 19:43

题目:02-线性结构1 两个有序链表序列的合并

题意:将俩个递增链表合并成非递减链表,注意提交代码时只需提交合并函数!

思路:就是最基本的链表操作。。。

代码:

#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,i,fig;    List Head,r,s;    Head = (List)malloc(sizeof(List));    r = Head;    //Head = r;    scanf("%d",&n);    for(i=0;i<n;i++)    {        scanf("%d",&fig);        s = (List)malloc(sizeof(List));        s->Data = fig;        r->Next = s;        r = s;    }    r->Next = NULL;    return Head;}void Print( List L ){    List t = NULL;    t = (List)malloc(sizeof(List));    L = L->Next;    if(L == NULL) {printf("NULL\n");return;}    while(L != NULL){        printf("%d ",L->Data);        L = L->Next;    }printf("\n");    L = t;}List Merge( List L1, List L2 ){    List L,p,t,tL1,tL2;    L = (List)malloc(sizeof(List));    p = L;    tL1 = L1->Next;tL2 = L2->Next;    while(tL1 != NULL || tL2 != NULL){        t = (List)malloc(sizeof(List));        if(tL2 == NULL || tL1 != NULL && tL1->Data <= tL2->Data){            t->Data = tL1->Data;            p ->Next = t;            p = t;            tL1 = tL1->Next;        }        else{            t->Data = tL2->Data;            p->Next = t;            p = t;            tL2 = tL2->Next;        }    }    p->Next = NULL;    L1->Next = NULL;//将链表头结点断开    L2->Next = NULL;    return L;}


0 0
原创粉丝点击