1.找出鍊錶的中間元素
解法:鍊錶的特點是容易增刪,難於隨機訪問。如果按照常規的想法:(1)遍歷鍊錶,獲取長度 (2)從頭走1/2步 。但是這種方式會需要o(1.5n)。可以採用如下方式:兩個人賽跑,如果a的速度是b的兩倍,則當a到達終點時,b則剛到中點。這樣,只需要遍歷一遍即可。
2.鍊錶的排序
解法:排序的方法很多,但由於鍊錶自身的特性,使得它在使用歸併排序時,很好的避免了歸併排序的弊端:空間複雜度高。這就使得歸併排序只有高速與穩定的優點。此外,歸併排序有兩種方式:(1)自頂向下 (2)自低向上 。這裡考慮到鍊錶的長度不易得,所以「自低向上」的方式更適合鍊錶。
3.兩個鍊錶是否有交叉
4.判斷鍊錶是否有環
解法:對於鍊錶的訪問的重複性,多是採用標記陣列的方式。這樣能很好的「記憶」相關操作,但在不允許使用標記的方式下,可以採用賽跑法:兩個人賽跑,a的速度比b的快,則會在有環的地方相遇。這種方式有個缺點:a和b之間的步差不好設定。如果a的步長是二,b的步長是一,在環很大的情況下,很久才會相遇。如果a的步長是b的五倍,則有可能一直遇不到。
直通BAT演算法面試 鍊錶
題一 鍊錶分化 題幹 對於乙個鍊錶,我們需要用乙個特定閾值完成對它的分化,使得小於等於這個值的結點移到前面,大於該值的結點在後面,同時保證兩類結點內部的位置關係不變。給定乙個鍊錶的頭結點head,同時給定閾值val,請返回乙個鍊錶,使小於等於它的結點在前,大於等於它的在後,保證結點值不重複。測試樣例...
狸貓的面試 專案描述 向量裁剪
專案描述 要求 在4s內,用單執行緒,完成對百萬級的向量圖形的裁剪 輸入 1.乙個多邊形 儲存在xml檔案中,順序儲存多邊形所有的端點 2.乙個向量圖形 line或者circle line儲存其兩個端點ab,circle儲存其圓心o和半徑r。實際有一百萬條直線和一百萬個圓 輸出 輸出裁剪後的圖形。例...
Java 資料結構與演算法面試 鍊錶
package test class node public node object ele,node node 設定運算元據域的介面方法 public object getele public void setele object ele 設定操作指標域的介面方法 public node getn...