数据结构 链表 合并两个有序的单链表 C语言版

来源:互联网 发布:女生滴风油精知乎 编辑:程序博客网 时间:2024/06/03 20:52
#include <cstdio>#include <stdlib.h>typedef struct Node{    int data;    struct Node * next;} Node,* Linklist;  //定义链表的结点,链表头void Initlist (Linklist *L)  //初始化链表{    *L=(Linklist)malloc(sizeof(Node));    (*L)->next=NULL;}void CreateFromTail(Linklist L) //尾插发建表{    Node *r,*s;    r=L;  //r总是指向链表的最后结点,s是新的结点    int flag=1; int num;    while(flag)    {        scanf("%d",&num);        if(num!= -1)        {            s=(Node *) malloc(sizeof(Node));            s->data=num;            r->next=s;            r=s;        }        else{            flag=0;            r->next=NULL;        }    }    return ;}void Output(Linklist L)  //输出单链表{    Node *temp;    temp=L->next;    while(temp !=NULL)    {        printf("%d ",temp->data);        temp=temp->next;    }    printf("\n");}Linklist Unionlist(Linklist LA,Linklist LB){    Linklist LC;    Initlist(&LC);    Node *pa,*pb,*r;    pa=LA->next; pb=LB->next;  r=LC;    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;        }    }    if(pa)        r->next=pa;    else        r->next=pb;    free(LB);    free(LA);    return(LC);}int main(){    Linklist LA,LB,LC;    Initlist(& LA);    Initlist(& LB);    printf("输入递增单链表LA 以-1为结束标志\n");    CreateFromTail(LA);    Output(LA);    printf("输入递增单链表LB 以-1为结束标志\n");    CreateFromTail(LB);    Output(LB);    if(LA->next==NULL) printf("srwefewfawefw\n");    LC=Unionlist(LA,LB);    printf("合并为一个有序的单链表为\n");    Output(LC);}

原创粉丝点击