兩個有序連結串列序列的合併
阿新 • • 發佈:2018-12-12
已知兩個非降序連結串列序列S1與S2,設計函式構造出S1與S2合併後的新的非降序連結串列S3。
輸入格式:
輸入分兩行,分別在每行給出由若干個正整數構成的非降序序列,用−1表示序列的結尾(−1不屬於這個序列)。數字用空格間隔。
輸出格式:
在一行中輸出合併後新的非降序連結串列,數字間用空格分開,結尾不能有多餘空格;若新連結串列為空,輸出NULL
。
輸入樣例:
1 3 5 -1
2 4 6 8 10 -1
輸出樣例:
1 2 3 4 5 6 8 10
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
} LNode,*LinkList;
Status ListCreate_CL(LinkList &CL) ;
void ListPrint_CL(LinkList &L)
{
LNode * t = L->next;
int firstNum = 1;
if(t == NULL) printf("NULL\n");
while(t != NULL)
{
if(firstNum)
{
printf("%d", t->data);
firstNum = 0;
}
else
printf(" %d", t-> data);
t = t->next;
}
}
int main()
{
LinkList c1,c2,c3,pa,pb,pc;
c3=(LinkList)malloc(sizeof(LNode));
c3->next=NULL;
ListCreate_CL(c1);
ListCreate_CL(c2);
pa=c1->next;
pb=c2->next;
pc=c3;
while(pa&&pb)
{
if(pa->data<=pb->data)
{
pc->next=pa;
pc=pa;
pa=pa->next;
}
else if(pa->data>pb->data)
{
pc->next=pb;
pc=pb;
pb=pb->next;
}
}
if(pa)
{
pc->next=pa;
}
else
{
pc->next=pb;
}
ListPrint_CL(c3);
return 0;
}
Status ListCreate_CL(LinkList &CL)
{
CL = (LinkList)malloc(sizeof (LNode) );
int n,f=1;
LNode *p,*q;
CL->next=NULL;
p=CL;
while(f)
{
scanf("%d",&n);
if(n>=0)
{
q=(LNode *)malloc(sizeof(LNode));
q->data=n;
p->next=q;
p=q;
}
else
{
f=0;
p->next=NULL;
}
}
return OK;
}