王道p38t13
主**:
linklist merge_desc(linklist &a,linklist &b)完整**:else
t->next=c->next;
c->next=t;
}if(ap!=null)
r=ap;
else
r=bp;
while(r!=null)
return
c;}
#include #includeview codeusing
namespace
std;
typedef
struct
lnode
lnode(
intx)
}lnode;
typedef lnode*linklist;
linklist build_list(
int * arr,int
n)
returnl;}
void show_list(linklist&l)
puts(
"");
}linklist merge_desc(linklist &a,linklist &b)
else
t->next=c->next;
c->next=t;
}if(ap!=null)
r=ap;
else
r=bp;
while(r!=null)
returnc;}
intmain();
int b_arr[5]=;
linklist a=build_list(a_arr,5
); linklist b=build_list(b_arr,5
); show_list(a);
show_list(b);
linklist c=merge_desc(a,b);
show_list(c);
}
注意:(1)這段**是我在白紙上手寫,然後上機驗證的。上機驗證發現,小於符號錯寫為了大於符號
:
while(ap!=null && bp!=null)最後合併的元素應該單調遞減,所以用尾插法應該每次選擇最小的元素進行尾插。else
t
->next=c->next;
c->next=t;
}
(2)我在白紙書寫紫色**時,if和else語句塊都寫了,驗證時發現可以簡寫到公共語句塊末尾。
兩個鍊錶合併為乙個鍊錶
include include typedef struct node node typedef struct node linklist using namespace std void creat linklist l,int n cout the linklist is full next n...
將兩個遞增的有序鍊錶合併為乙個遞增的有序鍊錶
將兩個遞增的有序鍊錶合併為乙個遞增的有序鍊錶。要求結果鍊錶仍使用原來兩個鍊錶的儲存空間,不另外占用其它的儲存空間。表中不允許有重複的資料。void mergelist linklist la,linklist lb,linklist lc 取較小者la中的元素,將pa鏈結在pc的後面,pa指標後移 ...
兩個公升序鍊錶合併為乙個公升序鍊錶
linklist mergeheaderlinklist linklist l,linklist p else while header2 next null if header1 next null printf 找到比 d大的值 d n header2 next data,header1 nex...