面試題 排序鍊錶的合併

2021-09-27 11:22:20 字數 787 閱讀 7922

舉例:

兩個鍊錶的情況可能有以下幾種,一是其中乙個鍊錶為空,二是兩個鍊錶都為空,三是兩個鍊錶都不為空。如果是兩個鍊錶都為空的話,那直接就將返回。下面針對存在不空鍊錶的情況做出分析。

1,如果是其中乙個鍊錶為空的話,直接返回另一鍊錶的頭結點就行了。

2,如果是兩個鍊錶都不為空的話,這個情況就比前兩種情況複雜一些。首先建立乙個新鍊錶,同時遍歷兩個鍊錶,並每次比較鍊錶資料的大小,哪個鍊錶的資料小,就將小的資料的當前節點加在新鍊錶的後面。一直這樣遍歷下去,如果遍歷到當前節點為空的時候,而另一煉表不為空,就直接將不空的鍊錶加在新鍊錶的後面。

3,返回結果就是新鍊錶的頭節點。

class node 

} /**

* 合併有序鍊錶

* @param l1 鍊錶l1

* @param l2 鍊錶l2

* @return 合併後的鍊錶的頭結點

*/public static node mergelist(node l1,node l2)

if(l2 == null)

while (l1!=null && l2!=null)else

mergenode = mergenode.next;

}if(l1!=null)

if (l2!=null)

return mergenode;

}

微軟面試題 鍊錶排序

很經典的一道題,既然是面試拿出來,肯定是要求 o n logn 的時間複雜度了。另有經典 鍊錶 k 個節點為一組進行逆序 遞迴,可以用快排或者歸排 這裡使用歸排,先用快慢指標法找到中間節點,然後斷開連線,分治處理兩個部分,最後合併。不像陣列歸排,這裡只用到了乙個 dummy 指標 臨時頭節點,關於鍊...

面試題25 合併兩個排序鍊錶

題目 輸入兩個遞增排序的鍊錶,合併這兩個鍊錶並使新鍊錶中的結點仍然是按照遞增排序的。include include list.h using namespace std struct listnode listnode mergetwolists listnode phead1,listnode p...

面試題15 合併兩個排序的鍊錶

方法一 非遞迴 include stdafx.h include using namespace std struct listnode 合併兩個有序鍊錶,非遞迴方法 listnode mergetwolist listnode plistonehead,listnode plisttwohead ...