具體思想就是新建乙個鍊錶,然後比較兩個鍊錶中的元素值,把較小的那個鏈到新鍊錶中,由於兩個輸入鍊錶的長度可能不同,所以最終會有乙個鍊錶先完成插入所有元素,則直接將另乙個未完成的鍊錶直接鏈入新鍊錶的末尾。
1:遞迴演算法(**也容易理解,但是它的弊端也很明顯時間空間開銷都很大,效率低)
2:非遞迴演算法
1:兩個鍊錶都為空
2:有乙個鍊錶為空
建立在這篇部落格的基礎上如何實現鍊錶
遞迴演算法
function
mergebyrecursion
($node1
,$node2
)$head
=null;if
($node1
->
val<=
$node2
->
val)
else
return
$head
;}
非遞迴演算法
function
merge
($p1
,$p2
)//哪個小就哪個作為表頭if(
$p1-
>
val<
$p2-
>
val)
else
//定義乙個移動指標,將兩個鍊錶連線在一起 $p=
$head
;while
($p1
&&$p2
)else$p=
$p->
next;}
if($p1!=
null)if
($p2
!=null
)return
$head
;}
$linklist
=new
linklist()
;$linklist
->
addfirst(3
);$linklist
->
addfirst(2
);$linklist
->
addfirst(1
);$linklist2
=new
linklist()
;$linklist2
->
addfirst(6
);$linklist2
->
addfirst(5
);print_r
(merge
($linklist
->
head
->
next
,$linklist2
->
head
->
next))
;print_r
(mergebyrecursion
($linklist
->
head
->
next
,$linklist2
->
head
->
next))
;
node object
([val]
=>
1[next]
=> node object
([val]
=>
2[next]
=> node object
([val]
=>
3[next]
=> node object
([val]
=>
5[next]
=> node object
([val]
=>
6[next]
=>))
)))
如何將兩個有序鍊錶合併成乙個有序鍊錶。
有兩個帶頭節點的有序鍊錶,如何把他們合成乙個有序鍊錶?假設鍊錶帶頭節點 我們通過取出其中一條鍊錶的頭節點作為合成後的有序鍊錶的頭節點 當然,這裡也可以自己重新生成乙個節點來作為頭節點,但是使用原先的可以節省開銷 取出後,這既是新鍊錶的head,也是它的tail,因為新鏈表現在只有這麼乙個節點,我們用...
將兩個有序鍊錶合併成乙個有序鍊錶
c codes as below class link public static link mergesortedlink link firstlink,link secondlink while currentnode2.next null else if currentnode1 null r...
將兩個有序鍊錶合併成乙個有序鍊錶
題目 給定兩個有序的鍊錶,編寫乙個函式來合併這兩個鍊錶,並且返回乙個新的有序的鍊錶 分析 這兩個鍊錶已經有序,所以,只需要對著兩個鍊錶的元素依次進行比較即可,這是對兩個鍊錶操作的基本問題。include stdafx.h include using namespace std struct list...