链表的合并 la+lb->lc升序
la :2 4 6 8
lb: 3 5 7 9
lc : 2 3 4 5 6 7 8 9
#include <iostream>
#include <cstdlib>
typedef int elemtype;
using namespace std;
每一个节点都包含数据域与指针域
struct Lnode{
elemtype data;
Lnode* next;
};
typedef Lnode* linklist;
/*先创建一个头结点 怎么创建头结点 L=(Lnode*)malloc(sizeof(Lnode))新创建的结点都不能悬空
然后依次创造结点,创造的结点都不能悬空,通过循环把要插入的数输进去->data
插的时候又分为头插和尾插尾插法:定义一个尾指针 头插法:可以实现逆序
*/
void createlist_L(linklist&L,int n){
linklistS,tali;
L=(Lnode*)malloc(sizeof(Lnode));
L->next = NULL;
tali=L;//记录尾端很重要
for(inti = 0;i <= n;i++){
S=(Lnode*)malloc(sizeof(Lnode));
cin>>S->data;
S->next = NULL;
tali->next = S;
tali=S;
}
}
void show(linklist L){
linklistp;
p=L->next;
while(p){
cout<<p->data<<"";
p=p->next;
}
cout<<endl;
}
void mergelist(linklist&la,linklist& lb,linklist& lc){//用头插法实现逆序
linklist pa,pb,panext,pbnext,pctail;
lc=la;//把a的头结点赋给c
pctail=lc;记录lc的尾部
pa=la->next;
pb=lb->next;
lc->next=NULL;//新建的头结点都不能悬空若放在pa=la->next;语句的前面,la链表就会丢失
free(lb);释放lb的头结点
while(pa&&pb){当la lb都存在时
if(pa->data<=pb->data){
pctail->next=pa;
pctail=pa;
pa=pa->next;
}
else{
pctail->next=pb;
pctail=pb;
pb=pb->next;
}
}
while(pa){只有la存在时
pctail->next=pa;
pctail=pa;
pa=pa->next;
}
while(pb){只有lb存在时
pctail->next=pb;
pctail=pb;
pb=pb->next;
}
}
int main(){
linklistl,m,n;
createlist_L(l,3);
createlist_L(m,3);
mergelist(l,m,n);
show(n);
return0;
}
链表的合并 la+lb->lc降序
la :2 4 6 8
lb: 3 5 7 9
lc : 9 8 7 6 5 4 3 2
#include <iostream>
#include <cstdlib>
typedef int elemtype;
using namespace std;
struct Lnode{
elemtype data;
Lnode* next;
};
typedef Lnode* linklist;
void createlist_L(linklist&L,int n){
linklistS,tali;
L=(Lnode*)malloc(sizeof(Lnode));
L->next=NULL;
tali=L;//记录尾端很重要
for(inti=0;i<=n;i++){
S=(Lnode*)malloc(sizeof(Lnode));
cin>>S->data;
S->next=NULL;
tali->next=S;
tali=S;
}
}
void show(linklist L){
linklistp;
p=L->next;
while(p){
cout<<p->data<<"";
p=p->next;
}
cout<<endl;
}
void mergelist(linklist&la,linklist& lb,linklist& lc){尾插法实现逆序
linklist pa,pb,panext,pbnext;
lc=la;//把a的头结点赋给c
pa=la->next;
pb=lb->next;
lc->next=NULL;//新建的头结点都不能悬空若放在pa=la->next;语句的前面,la链表就会丢失
free(lb);
while(pa&&pb){
if(pa->data<=pb->data){
panext=pa->next;//先记录一下因为后面pa->next改变了
pa->next=lc->next;
lc->next=pa;
pa=panext;
}
else{
pbnext=pb->next;//先记录一下
pb->next=lc->next;
lc->next=pb;
pb=pbnext;
}
}
while(pa){
panext=pa->next;//先记录一下
pa->next=lc->next;
lc->next=pa;
pa=panext;
}
while(pb){
pbnext=pb->next;//先记录一下
pb->next=lc->next;
lc->next=pb;
pb=pbnext;
}
}
int main(){
linklistl,m,n;
createlist_L(l,3);
createlist_L(m,3);
mergelist(l,m,n);
show(n);
return0;
}