這裡的表可以是陣列或者是鍊錶等,並且已經從小到大排好順序,我們的任務就是將這兩個表合併成乙個表。
首先,如果給定的表是兩個鍊錶,最簡便的方法就是用遞迴的辦法:
/**
* definition for singly-linked list.
* public class listnode
* }*/public
class
solution
else
}}
再者,如果給定的是兩個已排序的陣列nums1,nums2,並且每個陣列的長度m,n也已經給定,且nums1陣列中有足夠的空間可以容納合併後的陣列,則有乙個比較經濟實惠的辦法完成這個任務:
public
class solution
else
}while(j>=0) nums1[k--] = nums2[j--];
}}
在這裡需要注意兩個陣列的初始長度,如果其中乙個的初始長度是0就會導致無法進入主迴圈,合併失敗,好在我們是在nums1的原址上合併的,所以n==0的情況不會很糟,主要要考慮m==0的情況,這時候需要把nums2整個複製到nums1中。
該問題來自leetcode oj
合併兩個已排序的表
merge演算法 假定有乙個陣列a 1 m p,q,r,為它的三個索引,a p q a q 1,r 各自公升序排列,我們需要重新使得a p,r 也按公升序排列,我們用兩個指標s和t分別指向p和q 1,定義乙個輔助陣列b r p 1 比較a s 和a t 若前者小於等於後者,則將a p 存放到我們先前...
兩個已排序鍊錶的合併
1 typedef struct nodenode,linklist 5 void merge linklist la,linklist lb,linklist lc 6 9 if lb 10 node p 11 12 確定最大值在la上,還是lb上 13 if la.data lb.data 14...
合併兩個已排序的鍊錶
題目 輸入兩個遞增排序的鍊錶,合併這兩個鍊錶並使得新煉表中的結點仍然按照順序排序 分析 這個問題一出來,馬上就可以想到遞迴的思想,這種思想在鍊錶以及樹的操作中相當常見,在本題中主要涉及的還是鍊錶中值得比較,比較出較小的結點就插入新的鍊錶中,然後再比較下乙個結點,直接上 就一目了然了。public s...