微軟面試題 鍊錶排序

2021-10-02 10:56:14 字數 1052 閱讀 8818

很經典的一道題,既然是面試拿出來,肯定是要求 o(n * logn) 的時間複雜度了。

另有經典:鍊錶 k 個節點為一組進行逆序:

遞迴,可以用快排或者歸排 , 這裡使用歸排,先用快慢指標法找到中間節點,然後斷開連線,分治處理兩個部分,最後合併。不像陣列歸排,這裡只用到了乙個 dummy 指標 (臨時頭節點,關於鍊錶的題目經常使用),所以空間複雜度只有遞迴棧 o(logn). 要注意的是 merge(node1, node2) 呼叫時傳入的是遞迴返回的兩個節點,而不是 first 和 slow.next 兩個最初的頭結點。

public

class

linknodesorttest

}private

static node sortlist

(node first)

node secondfirst = slow.next;

// 斷開和後面的連線

slow.next = null;

// 注意返回值的使用,函式返回的是排序後的鍊錶首節點

node node =

sortlist

(first)

; node node1 =

sortlist

(secondfirst)

;return

merge

(node, node1);}

private

static node merge

(node node1, node node2)

else

tail = tail.next;

} tail.next =

(node1 == null ? node2 : node1)

;return dummy.next;

}// 自測**

public

static

void

main

(string[

] args)

}}

面試題 排序鍊錶的合併

舉例 兩個鍊錶的情況可能有以下幾種,一是其中乙個鍊錶為空,二是兩個鍊錶都為空,三是兩個鍊錶都不為空。如果是兩個鍊錶都為空的話,那直接就將返回。下面針對存在不空鍊錶的情況做出分析。1,如果是其中乙個鍊錶為空的話,直接返回另一鍊錶的頭結點就行了。2,如果是兩個鍊錶都不為空的話,這個情況就比前兩種情況複雜...

微軟面試題

題目 小明和小強都是張老師的學生,張老師的生日是m月n日,2人都知道張老師的生日是下列10組中的一天,張老師把m值告訴了小明,把n值告訴了小強,張老師問他們知道他的生日是那一天嗎?3月4日 3月5日 3月8日 6月4日 6月7日 9月1日 9月5日 12月1日 12月2日 12月8日 小明說 如果我...

微軟面試題

fly.c4 推薦您必看!六.演算法題 說明 這些題就不是什麼花樣了,考的是你的基礎知識怎麼樣。再聰明而沒有實學的人都將會被這些題所淘汰。1.鍊錶和陣列的區別在 2.編寫實現鍊錶排序的一種演算法。說明為什麼你會選擇用這樣的方法?3.編寫實現陣列排序的一種演算法。說明為什麼你會選擇用這樣的方法?4.請...