算法學習-玩轉單鏈表反轉

說兩句

單鏈表是一種基本的數(shù)據(jù)結構,也是現(xiàn)在技術面試經(jīng)沉嫖ǎ考到東西(我曾在這跌倒過,那叫個慘,誰讓我們平時并不注重這些基本算法呢),所以呢,身為技術人員,還是要多看看這些數(shù)據(jù)算法,萬一哪天我們都成為大神呢,哈哈哈!

單鏈表反轉

1. 遞歸思想

遞歸思想,
重點問題一:在于找出遞歸退出點,顯然單鏈表反轉退出點在于尾節(jié)點的nex節(jié)點為null的判斷上
重點問題二:遞歸過程中處理邏輯.遞歸思想每次處理的都是關聯(lián)的兩個元素,其實反轉的重點思想在于將原有下級元素的next設置為它的父節(jié)點,而它的父節(jié)點會在遞歸的下次后將處理它的下一個節(jié)點的反轉邏輯.
總結如下圖,每次遞歸返回當前節(jié)點保存了它下一個節(jié)點的引用,然后反轉本節(jié)點和下一個節(jié)點,本節(jié)點置為尾節(jié)點,以此類推:


遞歸反轉單鏈表.png

核心代碼如下:

public  static Node reverser(Node root){
//1.跳出條件
  if(root ==null||root.getNext()==null){
      return node;    
  }
 //2. 遞歸調用,直到最后節(jié)點
Node   next=reverser(root.getNext());
//3. 遞歸每步進行逐步反轉
root.getNext().setNext(root);
root.setNext(null);
//4. 返回新的尾節(jié)點
return next;
}

// 2. 三指針循環(huán)法
關鍵點:

  1. 解決循環(huán)反轉過程中斷鏈問題
  2. 三個指針后移,避免死循環(huán)問題

總結如下圖,利用三個起始位置不同的指針,兩個臨時變量逐步后移,當出現(xiàn)斷鏈時,通過第三個指針不斷續(xù)接.


三指針反轉.png

代碼:

    /**
     * 循環(huán)進行反轉
     */
    public static Node reverser1(Node node) {

        //空鏈表或只有一個節(jié)點涉馁,直接返回
        if (node == null || node.getNext() == null) {
            return node;
        }
        //三個指針贪庙,一個temp先走了兩步,后續(xù)每次一步


        //指針一,當前待反轉節(jié)點截碴,起步點為1
        Node root=node;

        //指針二孔庭,每次緩存當前節(jié)點的下一個節(jié)點尺上,起步點為2
        Node preNode=node.getNext();


        //指針三,為待反轉節(jié)點待下一個節(jié)點圆到,用來解決反轉后斷鏈問題怎抛,起步點為3
        Node temp = node.getNext().getNext();

        //當前節(jié)點待下一個節(jié)點,用來緩存待反轉的節(jié)點
        if (temp == null) {
            //鏈表長度為2芽淡,直接反轉
            node.getNext().setNext(node);
            root=node.getNext();
            node.setNext(null);
        } else {
            //鏈表長度大于2時
            //跳出條件為快指針為null時马绝,此時已經(jīng)循環(huán)到鏈表最后兩位
            while (temp!=null) {

                //通過指針二實現(xiàn)反轉
                preNode.setNext(root);

                //當前節(jié)點后移一步
                root=preNode;

                //指針二后移一步
                preNode=temp;

                //指針三后移一步
                temp=temp.getNext();
            }

            //最后兩位處理,將最后兩個節(jié)點進行反轉
            preNode.setNext(root);
            root=preNode;
            //把原鏈表首節(jié)點的下一個節(jié)點置為空
            node.setNext(null);
        }


        return root;

    }

可以看出兩個方法,遞歸法會出現(xiàn)兩個節(jié)點指向同一節(jié)點情況,三指針法會出現(xiàn)斷鏈情況.比較而言,遞歸法更簡潔.

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末挣菲,一起剝皮案震驚了整個濱河市富稻,隨后出現(xiàn)的幾起案子掷邦,更是在濱河造成了極大的恐慌,老刑警劉巖唉窃,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件耙饰,死亡現(xiàn)場離奇詭異,居然都是意外死亡纹份,警方通過查閱死者的電腦和手機苟跪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蔓涧,“玉大人件已,你說我怎么就攤上這事≡” “怎么了篷扩?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長茉盏。 經(jīng)常有香客問我鉴未,道長,這世上最難降的妖魔是什么鸠姨? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任铜秆,我火速辦了婚禮,結果婚禮上讶迁,老公的妹妹穿的比我還像新娘连茧。我一直安慰自己,他們只是感情好巍糯,可當我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布啸驯。 她就那樣靜靜地躺著,像睡著了一般祟峦。 火紅的嫁衣襯著肌膚如雪罚斗。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天宅楞,我揣著相機與錄音针姿,去河邊找鬼。 笑死咱筛,一個胖子當著我的面吹牛搓幌,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播迅箩,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼溉愁,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起拐揭,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤撤蟆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后堂污,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體家肯,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年盟猖,在試婚紗的時候發(fā)現(xiàn)自己被綠了讨衣。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡式镐,死狀恐怖反镇,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情娘汞,我是刑警寧澤歹茶,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站你弦,受9級特大地震影響惊豺,放射性物質發(fā)生泄漏。R本人自食惡果不足惜禽作,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一尸昧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧领迈,春花似錦彻磁、人聲如沸碍沐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽累提。三九已至尘喝,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間斋陪,已是汗流浹背朽褪。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留无虚,地道東北人缔赠。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像友题,于是被迫代替她去往敵國和親嗤堰。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內(nèi)容

  • 我出生于鄉(xiāng)下的一個農(nóng)村告匠,7歲開始按部就班的求學生涯,幼兒園离唬、小學后专、中學、大學输莺,就這樣18年后我從大學順利畢業(yè)戚哎,宣告...
    行者的城堡閱讀 942評論 0 0
  • 漸漸也喜歡上了現(xiàn)在的生活 沒有驚喜 也沒有意外.
    陳嘉璐閱讀 294評論 0 0
  • 順豐花1億為員工定制“耐克工作服”,你喂員工吃草嫂用,卻指望他們有狼性建瘫? 我發(fā)現(xiàn)很多老板很容易都是袁紹這種性格,人前謙...
    _飛魚閱讀 743評論 0 51
  • 前言:此篇選自《日知錄》尸折,里面記錄大部分都是每天所看所悟啰脚。而這篇是午睡醒后,看到雕爺一篇文章实夹,對我觸動很大橄浓,所以記...
    布一日記閱讀 476評論 1 4