将两个有序单链表合成一个链表

 

#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 head = (List)malloc(sizeof(PtrToNode));
    head ->Next = NULL;
    if(n){
        List temp = head;
        for(int i=0;i<n;i++){
            List p = (List)malloc(sizeof(PtrToNode));
            scanf("%d",&(p->Data));
            temp ->Next = p;
            temp = p;
        }
        temp ->Next = NULL;
    }
    return head;
}

void Print( List L ){
    L = L->Next;
    if(L==NULL){
        printf("NULL");
    }
    else {
        while(L){
            printf("%d ",L ->Data);
            L = L->Next;
        }
    }
    printf("\n");
}

List Merge( List L1, List L2 ){
    List pa = L1 ->Next;
    List pb = L2 ->Next;
    List L = (List)malloc(sizeof(List));
    List r = L;
    while(pa != NULL&&pb != NULL){
        if(pa ->Data < pb ->Data){
            r ->Next = pa;
            r = pa;
            pa = pa->Next;
        }
        else{
            r ->Next = pb;
            r = pb;
            pb = pb ->Next;
        }
    }
    r ->Next = pa?pa:pb;
    L1 ->Next = NULL;
    L2 ->Next = NULL;
    return L;
}

 

posted @ 2021-09-20 22:34  慢漫曼蔓  阅读(278)  评论(0)    收藏  举报