1.鏈表劃分
思路一:可以把鏈表當(dāng)作一副牌一樣,用指針p遍歷,不斷地把比指定值x小的幾點(diǎn)不斷地插到前面比指定值小的的牌的最后邊,如果遍歷帶大于等于指定值x的節(jié)點(diǎn)就不用管。我們指定一個(gè)Boolean值變量flag用來(lái)記錄p左邊是否有大于等于指定值的節(jié)點(diǎn)。定義pre為p前驅(qū)節(jié)點(diǎn),T為已遍歷而且比x小的最有節(jié)點(diǎn);
一共可能會(huì)遇見(jiàn)三種情況(x=3)
情況一:當(dāng)p.val>=x,那么pre和p都向右移動(dòng)就行.然后flag設(shè)為false,因?yàn)閜此時(shí)已經(jīng)移動(dòng)到大于等于x節(jié)點(diǎn)
情況二,p左邊沒(méi)有比x 大的節(jié)點(diǎn)(flag==true),而且p.val<x,那么
p,pre,T,都向右移動(dòng)一位。
情況三,p左邊有比x大的節(jié)點(diǎn)(flag==false),那么把p調(diào)轉(zhuǎn)到T的后面去,然后更新所有節(jié)點(diǎn)。
實(shí)現(xiàn)代碼:
思路二
實(shí)現(xiàn)代碼:
擴(kuò)展問(wèn)題:
2. 鏈表洗牌
示例代碼: