两个有序链表序列的合并

来源:互联网 发布:傲虎网络 编辑:程序博客网 时间:2024/05/15 21:39

已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的并集新非降序链表S3。

输入格式:

输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用表示序列的结尾(不属于这个序列)。数字用空格间隔。

输出格式:

在一行中输出合并后新的非降序链表,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出NULL

输入样例:

1 3 5 -12 4 6 8 10 -1

输出样例:

1 2 3 4 5 6 8 10
/*  两个队列同时向后比较扫,较小的加入c;  要注意最后可能有一个队列有剩余,要添加到c末尾*/#include <bits/stdc++.h>typedef struct LNode{    int data;    struct LNode *next;} LNode,*LinkList;void ListPrint_L(LinkList L){//输出单链表    LNode *p=L->next;  //p指向第一个元素结点    if(!p)        printf("NULL\n");    while(p!=NULL)    {        if(p->next!=NULL)            printf("%d ",p->data);        else            printf("%d\n",p->data);        p=p->next;    }}int main(){    LinkList La, Lb, Lc;    int da;    LNode *curPtr_a, *rearPtr_a, prePtr_a;    LNode *curPtr_b, *rearPtr_b, prePtr_b;    LNode *curPtr_c, *rearPtr_c, prePtr_c;    La = (LinkList)malloc(sizeof(LinkList));    Lb = (LinkList)malloc(sizeof(LinkList));    Lc = (LinkList)malloc(sizeof(LinkList));    Lc->next = NULL;    rearPtr_a = La, rearPtr_b = Lb, rearPtr_c = Lc;    scanf("%d", &da);    while(da != -1)    {        curPtr_a = (LNode *)malloc(sizeof(LNode));        curPtr_a->data = da;        rearPtr_a->next = curPtr_a;        rearPtr_a = curPtr_a;        scanf(" %d", &da);    }    rearPtr_a->next = NULL;    getchar();    scanf("%d", &da);    while(da != -1)    {        curPtr_b = (LNode *)malloc(sizeof(LNode));        curPtr_b->data = da;        rearPtr_b->next = curPtr_b;        rearPtr_b = curPtr_b;        scanf(" %d", &da);    }     rearPtr_b->next = NULL;     curPtr_a = La->next;     curPtr_b = Lb->next;     while(curPtr_a && curPtr_b)     {         if(curPtr_a->data <= curPtr_b->data)         {             rearPtr_c->next = curPtr_a;             rearPtr_c = rearPtr_c->next;             curPtr_a = curPtr_a->next;         }         else        {             rearPtr_c->next = curPtr_b;             rearPtr_c = rearPtr_c->next;             curPtr_b = curPtr_b->next;         }     }     if(curPtr_a)     {             rearPtr_c->next = curPtr_a;     }     if(curPtr_b)     {             rearPtr_c->next = curPtr_b;     }//     rearPtr_c->next = NULL;     ListPrint_L(Lc);}