如何合併兩個已排序的表?

2021-07-24 02:29:27 字數 673 閱讀 2598

這裡的表可以是陣列或者是鍊錶等,並且已經從小到大排好順序,我們的任務就是將這兩個表合併成乙個表。

首先,如果給定的表是兩個鍊錶,最簡便的方法就是用遞迴的辦法:

/**

* 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...