1、鏈表

一乌企、第206題:反轉(zhuǎn)鏈表

1虑润、問題


image.png

2、解題思路

2.1加酵、反轉(zhuǎn)鏈表拳喻,一個(gè)向后的指針明顯無法解決問題了,在不改變鏈表本身結(jié)構(gòu)的情況下猪腕,可以手動(dòng)記錄遍歷到的節(jié)點(diǎn)的preNode冗澈,curNode,nextNode陋葡。至于為什么需要三個(gè)指針亚亲,如下:
2.2、preNode:上一個(gè)節(jié)點(diǎn)指針腐缤。鏈表只有單向指針捌归,無法直接獲取上一個(gè)節(jié)點(diǎn),所以需要在循環(huán)外面聲明preNode岭粤,循環(huán)一次更新一次惜索。
2.3、curNode:當(dāng)前節(jié)點(diǎn)剃浇。
2.4巾兆、nextNode:反轉(zhuǎn)時(shí)猎物,curNode.next = preNode,如果再想使用curNode.next會(huì)發(fā)現(xiàn)已經(jīng)被覆蓋了臼寄,故需要記錄霸奕。
2.4、反轉(zhuǎn)之后吉拳,三個(gè)指針都同步向后挪動(dòng)一位。

3适揉、代碼

class ListNode {
        int val;
        ListNode next;
        ListNode(int x) {
            val = x;
        }
}
class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode preNode = null;
        ListNode curNode = head;
        while(curNode != null) {
            // 臨時(shí)存儲(chǔ)next留攒,避免丟失
            ListNode nextNode = curNode.next;
            // 反轉(zhuǎn)
            curNode.next = preNode;

            // 向后移動(dòng)
            preNode = curNode;
            curNode = nextNode;
        }
        return preNode;
    }
}

二、第92題:反轉(zhuǎn)鏈表 II

1嫉嘀、題目


image.png

2炼邀、思路

2.1、把m到n位置的鏈表單獨(dú)截取出來剪侮,反轉(zhuǎn)之后拭宁,再拼接到原鏈表上。
2.2瓣俯、mPre:截取要注意記錄m位置上一個(gè)節(jié)點(diǎn)杰标,便于后續(xù)把反轉(zhuǎn)鏈表拼接回去。因?yàn)閱捂湵矶际窍蚝笾浮?br> 2.3彩匕、nNext:移動(dòng)到n位置后腔剂,記錄n的下一個(gè)位置,便于后續(xù)拼接驼仪。
2.4掸犬、mPre為null情況:如果從1開始翻轉(zhuǎn),mPre為null绪爸,mPre.next = preNode出空指針異常湾碎。此時(shí),直接返回截取出來并反轉(zhuǎn)的鏈表即可奠货,不用拼接在mPre后面介褥。

3、代碼

class ListNode {
        int val;
        ListNode next;
        ListNode(int x) {
            val = x;
        }
}
class Solution {
    public ListNode reverseBetween(ListNode head, int m, int n) {
        if(m == n) {
            return head;
        }
        ListNode preNode = null;
        ListNode curNode = head;
        ListNode nextNode = null;

        // 存儲(chǔ)start
        ListNode start = curNode;
        // 將curNode挪動(dòng)到m位置
        for(int i=0; i<m-1; i++) {
            preNode = curNode;
            curNode = curNode.next;
            nextNode = curNode.next;
        }
        // 記錄m位置前一個(gè)節(jié)點(diǎn)仇味,便于后續(xù)拼接
        ListNode mPre = preNode;
        // 記錄m位置呻顽,后面翻轉(zhuǎn)要從m開始
        ListNode mCur = curNode;

        // 將curNode從m 挪動(dòng)到n位置
        for(int i=m; i<n; i++) {
            preNode = curNode;
            curNode = curNode.next;
            nextNode = curNode.next;
        }
        // 記錄n位置的下一個(gè)節(jié)點(diǎn),便于拼接
        ListNode nNext = nextNode;

        // 設(shè)置翻轉(zhuǎn)后的節(jié)點(diǎn)下一個(gè)節(jié)點(diǎn)是 nNext
        preNode = nNext;
        // 從m位置開始翻轉(zhuǎn)
        curNode = mCur;
        while(curNode != nNext) {
            // 存儲(chǔ)next
            nextNode = curNode.next;
            // 反轉(zhuǎn)
            curNode.next = preNode;
            preNode = curNode;
            curNode = nextNode;
        }

        // mPre拼接翻轉(zhuǎn)后的list丹墨,
        // 如果mPre為空廊遍,直接返回,否則返回剛開始記錄的start
        if(mPre == null) {
            return preNode;
        }
        mPre.next = preNode;
        return start;
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末贩挣,一起剝皮案震驚了整個(gè)濱河市喉前,隨后出現(xiàn)的幾起案子没酣,更是在濱河造成了極大的恐慌,老刑警劉巖卵迂,帶你破解...
    沈念sama閱讀 211,743評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件裕便,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡见咒,警方通過查閱死者的電腦和手機(jī)偿衰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來改览,“玉大人下翎,你說我怎么就攤上這事”Φ保” “怎么了视事?”我有些...
    開封第一講書人閱讀 157,285評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)庆揩。 經(jīng)常有香客問我俐东,道長(zhǎng),這世上最難降的妖魔是什么订晌? 我笑而不...
    開封第一講書人閱讀 56,485評(píng)論 1 283
  • 正文 為了忘掉前任虏辫,我火速辦了婚禮,結(jié)果婚禮上腾仅,老公的妹妹穿的比我還像新娘乒裆。我一直安慰自己,他們只是感情好推励,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評(píng)論 6 386
  • 文/花漫 我一把揭開白布鹤耍。 她就那樣靜靜地躺著,像睡著了一般验辞。 火紅的嫁衣襯著肌膚如雪稿黄。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,821評(píng)論 1 290
  • 那天跌造,我揣著相機(jī)與錄音杆怕,去河邊找鬼。 笑死壳贪,一個(gè)胖子當(dāng)著我的面吹牛陵珍,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播违施,決...
    沈念sama閱讀 38,960評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼互纯,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了磕蒲?” 一聲冷哼從身側(cè)響起留潦,我...
    開封第一講書人閱讀 37,719評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤只盹,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后兔院,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體殖卑,經(jīng)...
    沈念sama閱讀 44,186評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評(píng)論 2 327
  • 正文 我和宋清朗相戀三年坊萝,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了孵稽。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,650評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡十偶,死狀恐怖肛冶,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情扯键,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布珊肃,位于F島的核電站荣刑,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏伦乔。R本人自食惡果不足惜厉亏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望烈和。 院中可真熱鬧爱只,春花似錦、人聲如沸招刹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)疯暑。三九已至训柴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間妇拯,已是汗流浹背幻馁。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留越锈,地道東北人仗嗦。 一個(gè)月前我還...
    沈念sama閱讀 46,370評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像甘凭,于是被迫代替她去往敵國(guó)和親稀拐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評(píng)論 2 349