鏈表的合併 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;
}