链表合并的问题
1 两个非递减的链表 LA LB 合并成LA为头节点的非递增链表
2 三个非递减的链表 LA LB LC 合并成LA为头节点的非递增链表
3 两个非递减的链表 LA LB 合并成LA为头节点的非递减链表
4 三个非递减的链表 LA LB LC合并成LA为头节点的非递减链表
1 两个非递减的链表 LA,LB 合并成LA为头节点的非递增链表
typedef struct Lnode{
elemtype data;
struct Lnode *next;
}Lnode,*linklist;
//两个非递减的链表 LA LB 合并成LA为头节点的非递增链表
void merge(linklist &LA,linklist LB){
linklist pa,pb;
pa=LA->next;
pb=LB->next;
linklist s;//s用来接收要头插的那个结点
s=LA;
while(pa&&pb){//或者写成while(pa!=null && pb!=null)
if(pa->date<=pb->date){
s=pa;
pa=pa->next;
}
else{
s=pb;
pb=pb->next;
}
s->next=LA->next;
LA->next=s;
} //while循环结束
if(!pa) pa=pb;
while(pa){
s=pa;
pa=pa->next;
s->next=LA->next;
LA->next=s;
}
free(LB);
}
2 三个非递减的链表 LA,LB,LC 合并成LA为头节点的非递增链表
typedef struct Lnode{
elemtype data;
struct Lnode *next;
}Lnode,*linklist;
//三个非递减的链表 LA LB LC 合并成LA为头节点的非递增链表
void merge(linklist &LA,linklist LB,linklist LC){
linklist pa,pb,pc;
pa=LA->next;
pb=LB->next;
pc=Lc->next;
linklist s;//s用来接收要头插的那个结点
s=LA->next;
while(pa&&pb&&pc){//或者写成while(pa!=null && pb!=null)
if(pa->date<=pb->date){
if(pa->date<=pc->date){
s=pa;
pa=pa->next;
}
else{
s=pc;
pc=pc->next;
}
}
else{
if(pb->date<=pc->date){
s=pb;
pb=pb->next;
}
else{
s=pc;
pc=pc->next;
}
}
s-next=LA->next;
LA->next=s;
}//while循环结束
if(!pa) pa=pc;
if(!pb) pb=pc;
while(pa&&pb){
if(pa->date<=pb->date){
s=pa;
pa=pa->next;
}
else{
s=pb;
pb=pb->next;
}
s-next=LA->next;
LA->next=s;
}//while循环结束
if(!pa) pa=pb;
while(pa){
s=pa;
pa=pa->next;
s-next=LA->next;
LA->next=s;
}
free(LB);
free(LC);
}
3 两个非递减的链表 LA,LB 合并成LA为头节点的非递减链表
typedef struct Lnode{
elemtype data;
struct Lnode *next;
}Lnode,*linklist;
//两个非递减的链表 LA LB 合并成LA为头节点的非递减链表
void merge(linklist &LA,linklist LB){
linklist pa,pb;
pa=LA->next;
pb=LB->next;
linklist s=LA;//s用来接收要头插的那个结点
while(pa&&pb){//或者写成while(pa!=null && pb!=null)
if(pa->date<=pb->date){
s->next=pa;
s=s->next;
pa=pa->next;
}
else{
s->next=pb;
s=s->next;
pb=pb->next;
}
} //while循环结束
if(!pa) pa=pb;
while(pa){
s->next=pa;
s=s->next;
pa=pa->next;
}
free(LB);
}
4 三个非递减的链表 LA,LB,LC合并成LA为头节点的非递减链表
typedef struct Lnode{
elemtype data;
struct Lnode *next;
}Lnode,*linklist;
//三个非递减的链表 LA LB LC合并成LA为头节点的非递减链表
void merge(linklist &LA,linklist LB,linklist LC){
linklist pa,pb,pc;
pa=LA->next;
pb=LB->next;
pc=LC->next;
linklist s=LA;//s用来接收要头插的那个结点
while(pa&&pb&&pc){//或者写成while(pa!=null && pb!=null)
if(pa->date<=pb->date){
if(pa->date<=pc->date){
s->next=pa;
s=s->next;
pa=pa->next;
}
else{
s->next=pc;
s=s->next;
pc=pc->next;
}
}
else{
if(pb->date<=pc->date){
s->next=pb;
s=s->next;
pb=pb->next;
}
else{
s->next=pc;
s=s->next;
pc=pc->next;
}
}
} //while循环结束
if(!pa) pa=pc;
if(!pb) pb=pc;
while(pa&&pb){//或者写成while(pa!=null && pb!=null)
if(pa->date<=pb->date){
s->next=pa;
s=s->next;
pa=pa->next;
}
else{
s->next=pb;
s=s->next;
pb=pb->next;
}
} //while循环结束
if(!pa) pa=pb;
while(pa){
s->next=pa;
s=s->next;
pa=pa->next;
}
free(LB);
free(LC);
}