發(fā)布時(shí)間:2024-01-24閱讀(20)
此題屬于中低難度的題,思路并不復(fù)雜,單其中有很多易錯(cuò)點(diǎn),比如空指針判斷、指針丟失等;
思路:設(shè)置三個(gè)指針pre、cur、next,初始時(shí)刻pre = null,cur = head;
開(kāi)始處理,首先執(zhí)行next = cur.next,防止后面cur.next修改之后指針丟失;

鏈表反轉(zhuǎn)
環(huán)形鏈表檢測(cè)并返回入環(huán)點(diǎn)這個(gè)題目技巧性很強(qiáng),一般不太容易想到;大體思路如下:
首先設(shè)置快慢指針,每一次移動(dòng),快指針移動(dòng)兩步(尤其需要注意第二步判斷空指針),慢指針移動(dòng)移步;然后判斷兩個(gè)指針是否指向同一位置。
如果最終快指針遇見(jiàn)null,則無(wú)環(huán);如果快慢指針指向了同一位置,則有環(huán);
如果有環(huán)的化,兩指針相遇時(shí),快指針移動(dòng)到head位置,并且變?yōu)槁羔槪看我苿?dòng)一步);然后兩個(gè)指針再次開(kāi)始移動(dòng),直到再次相遇即為入環(huán)點(diǎn)。(證明略)

環(huán)形鏈表檢測(cè)
鏈表歸并排序二路歸并排序:假設(shè)兩個(gè)有序數(shù)組,設(shè)置兩個(gè)指針,指向0位置,將指向比較小元素的指針對(duì)應(yīng)的元素存入數(shù)組,并移動(dòng)指針;直到兩個(gè)指針移動(dòng)完畢;
歸并排序思路:歸并排序是建立在二路歸并排序基礎(chǔ)之上,將數(shù)組逐漸分解,直到僅有一個(gè)元素,然后進(jìn)行二路歸并排序。(先分后合的思想)
偽代碼如下:
public int[] merge(int[] nums,int start, int end){
if(start == end){
return new int[]{nums[start]};
}
int mid = (start end) / 2;
int[] s1 = merge(nums, start,mid);
int[] s2 = merge(nums,mid 1, end);
return binMerge(s1,s2);
}
鏈表歸并排序比數(shù)組歸并排序難度有所增加,但思路是一致的,仍然是逐步分解,直到只有一個(gè)結(jié)點(diǎn),然后再合并。
主要區(qū)別在于中點(diǎn)的選取,關(guān)于中點(diǎn)選取,這里也有現(xiàn)成的思路,通過(guò)快慢指針,當(dāng)快指針走到終點(diǎn)時(shí),慢指針即為中點(diǎn)。
具體實(shí)現(xiàn)如下:
連載系列:
技術(shù)連載:開(kāi)篇詞
技術(shù)連載:連載提綱設(shè)計(jì)思路
技術(shù)連載:數(shù)據(jù)結(jié)構(gòu) - 數(shù)組
技術(shù)連載:數(shù)據(jù)結(jié)構(gòu) - 數(shù)組常見(jiàn)面試題匯總
技術(shù)連載:數(shù)據(jù)結(jié)構(gòu) - 鏈表
歡迎分享轉(zhuǎn)載→http://m.avcorse.com/read-217553.html
Copyright ? 2024 有趣生活 All Rights Reserve吉ICP備19000289號(hào)-5 TXT地圖HTML地圖XML地圖