劍指Offer對答如流系列 合併兩個排序的鍊錶

2022-08-30 02:24:09 字數 673 閱讀 8360

輸入兩個遞增排序的鍊錶,合併這兩個鍊錶並使新鍊錶中的結點仍然是按照遞增排序的。

鍊錶結構:

public class listnode 

}

這道面試題,太常見了!!!

不難,但是容易出錯。一方面是合併過程鍊錶中間斷裂或者沒有做到遞增,另一方面是**的魯棒性不行,也就是忽略了特殊測試(比如任意乙個或者兩個鍊錶的頭結點為null)

最容易想到的思路是再新建乙個鍊錶,然後對給出的兩個鍊錶分情況討論即可。

因為合併過程中,每次都是從兩個鍊錶中找出較小的乙個來鏈結,因此另乙個思路是採用遞迴來實現:當任意乙個鍊錶為null時,直接鏈結另乙個鍊錶即可;其餘情況只需要在兩個鍊錶中找出較小的乙個結點進行鏈結,該結點的next值繼續通過遞迴函式來鏈結。

public listnode merge(listnode list1,listnode list2) else

p=p.next;

}p.next = (list1==null?list2:list1);

return dummyhead.next;

}

public listnode merge(listnode list1,listnode list2) else 

}

劍指Offer對答如流系列 醜數

我們把只包含質因子2 3和5的數稱作醜數 ugly number 求按從小到大的順序的第n個醜數。例如6 8都是醜數,但14不是,因為它包含質因子7。習慣上我們把1當做是第乙個醜數。判斷乙個數是不是醜數,最容易想到的方法就是讓這個數不斷除以2,3,5。對於第n個醜數,只要從1開始,依次判斷每個數是不...

劍指Offer對答如流系列 剪繩子

給你一根長度為n繩子,請把繩子剪成m段 m n都是整數,n 1並且m 1 每段的繩子的長度記為k 0 k 1 k m k 0 k 1 k m 可能的最大乘積是多少?例如當繩子的長度是8時,我們把它剪成長度分別為2 3 3的三段,此時得到最大的乘積18。遇到問題,先分析問題,由分析的結果確定所運用的演...

劍指Offer對答如流系列 包含min函式的棧

定義棧的資料結構,請在該型別中實現乙個能夠得到棧的最小元素的min函式。在該棧中,呼叫min push及pop的時間複雜度都是o 1 push 和 pop均容易實現。主要就是min函式的定義,如果要通過操作push和pop操作獲取最小元素時間複雜度為o 1 基本上是不可能的。如果我們另外定義乙個成員...