[劍指offer] 鏈表02:反轉(zhuǎn)鏈表

題目描述

輸入一個(gè)鏈表涩咖,反轉(zhuǎn)鏈表后,輸出新鏈表的表頭繁莹。

解題思路

設(shè)置三個(gè)指針檩互,head為當(dāng)前節(jié)點(diǎn),pre為當(dāng)前節(jié)點(diǎn)的前一個(gè)節(jié)點(diǎn)咨演,next為當(dāng)前節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)闸昨,需要pre和next的目的是讓當(dāng)前節(jié)點(diǎn)從pre->head->next1->next2變成pre<-head next1->next2的過程中,用pre讓節(jié)點(diǎn)反轉(zhuǎn)所指方向薄风,next節(jié)點(diǎn)保存next1節(jié)點(diǎn)防止鏈表斷開

需要注意的點(diǎn)
1饵较、如果輸入的頭結(jié)點(diǎn)是null,則返回null
2遭赂、鏈表斷裂的考慮

自畫圖解

反轉(zhuǎn)鏈表圖解

參考代碼(Java)

  • 結(jié)構(gòu)定義
  public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
      this.val = val;
    }
  }
  • 代碼
public class Demo02 {
  public static ListNode ReverseList(ListNode head) {
    if (head == null)
        return null;
    // head為當(dāng)前節(jié)點(diǎn)循诉,如果當(dāng)前節(jié)點(diǎn)為空的話,那就什么也不做撇他,直接返回null茄猫;
    ListNode pre = null;
    ListNode next = null;
    // 當(dāng)前節(jié)點(diǎn)是head,pre為當(dāng)前節(jié)點(diǎn)的前一節(jié)點(diǎn)困肩,next為當(dāng)前節(jié)點(diǎn)的下一節(jié)點(diǎn)
    // 需要pre和next的目的是讓當(dāng)前節(jié)點(diǎn)從pre->head->next1->next2變成pre<-head next1->next2
    // 即pre讓節(jié)點(diǎn)可以反轉(zhuǎn)所指方向划纽,但反轉(zhuǎn)之后如果不用next節(jié)點(diǎn)保存next1節(jié)點(diǎn)的話,此單鏈表就此斷開了
    // 所以需要用到pre和next兩個(gè)節(jié)點(diǎn)
    // 1->2->3->4->5
    // 1<-2<-3 4->5
    while (head != null) {
        // 做循環(huán)锌畸,如果當(dāng)前節(jié)點(diǎn)不為空的話勇劣,始終執(zhí)行此循環(huán),此循環(huán)的目的就是讓當(dāng)前節(jié)點(diǎn)從指向next到指向pre
        // 如此就可以做到反轉(zhuǎn)鏈表的效果
        // 先用next保存head的下一個(gè)節(jié)點(diǎn)的信息蹋绽,保證單鏈表不會(huì)因?yàn)槭ead節(jié)點(diǎn)的原next節(jié)點(diǎn)而就此斷裂
        next = head.next;
        // 保存完next芭毙,就可以讓head從指向next變成指向pre了筋蓖,代碼如下
        head.next = pre;
        // head指向pre后,就繼續(xù)依次反轉(zhuǎn)下一個(gè)節(jié)點(diǎn)
        // 讓pre退敦,head粘咖,next依次向后移動(dòng)一個(gè)節(jié)點(diǎn),繼續(xù)下一次的指針反轉(zhuǎn)
        pre = head;
        head = next;
    }
    // 如果head為null的時(shí)候侈百,pre就為最后一個(gè)節(jié)點(diǎn)了瓮下,但是鏈表已經(jīng)反轉(zhuǎn)完畢,pre就是反轉(zhuǎn)后鏈表的第一個(gè)節(jié)點(diǎn)
    // 直接輸出pre就是我們想要得到的反轉(zhuǎn)后的鏈表
    return pre;
  }
}
  • 測試主方法
public static void main(String[] args) {
  ListNode listNode = new ListNode(1);
  ListNode listNode2 = new ListNode(2);
  ListNode listNode3 = new ListNode(3);
  ListNode listNode4 = new ListNode(4);
  listNode3.next = listNode4;
  listNode2.next = listNode3;
  listNode.next = listNode2;

  ListNode reverseList = ReverseList(listNode);

  while (reverseList != null) {
        System.out.println(reverseList.val);
        reverseList = reverseList.next;
  }
}
  • 輸出
4
3
2
1
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末钝域,一起剝皮案震驚了整個(gè)濱河市讽坏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌例证,老刑警劉巖路呜,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異织咧,居然都是意外死亡胀葱,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進(jìn)店門笙蒙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抵屿,“玉大人,你說我怎么就攤上這事捅位≡穑” “怎么了?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵艇搀,是天一觀的道長尿扯。 經(jīng)常有香客問我,道長中符,這世上最難降的妖魔是什么姜胖? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮淀散,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蚜锨。我一直安慰自己档插,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布亚再。 她就那樣靜靜地躺著郭膛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪氛悬。 梳的紋絲不亂的頭發(fā)上则剃,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天耘柱,我揣著相機(jī)與錄音,去河邊找鬼棍现。 笑死调煎,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的己肮。 我是一名探鬼主播士袄,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼谎僻!你這毒婦竟也來了娄柳?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤艘绍,失蹤者是張志新(化名)和其女友劉穎赤拒,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體诱鞠,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡需了,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了般甲。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肋乍。...
    茶點(diǎn)故事閱讀 40,427評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖敷存,靈堂內(nèi)的尸體忽然破棺而出墓造,到底是詐尸還是另有隱情,我是刑警寧澤锚烦,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布觅闽,位于F島的核電站,受9級特大地震影響涮俄,放射性物質(zhì)發(fā)生泄漏蛉拙。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一彻亲、第九天 我趴在偏房一處隱蔽的房頂上張望孕锄。 院中可真熱鬧,春花似錦苞尝、人聲如沸畸肆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽轴脐。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間大咱,已是汗流浹背恬涧。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留碴巾,地道東北人溯捆。 一個(gè)月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像餐抢,于是被迫代替她去往敵國和親现使。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評論 2 359

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

  • 1. 逆序打印鏈表(單鏈表) 給定單鏈表旷痕,從尾到頭打印每個(gè)節(jié)點(diǎn)的值碳锈,不同的值之間用空格隔開。比如:1>2>3>4>...
    少冰三hun甜閱讀 3,998評論 1 12
  • 題目描述 輸入一個(gè)鏈表欺抗,反轉(zhuǎn)鏈表后售碳,輸出新鏈表的表頭。 解題思路 設(shè)置三個(gè)指針绞呈,head為當(dāng)前節(jié)點(diǎn)贸人,pre為當(dāng)前節(jié)...
    繁著閱讀 257評論 0 0
  • 美妙寶貝閱讀 184評論 0 1
  • 8.31鼠鼠夜聊 八月又過完了艺智,時(shí)間對于有小目標(biāo)的人來說,是白駒過隙的圾亏。 乖乖在家呆了10多天十拣,一天一部電影,...
    白鼠鼠閱讀 240評論 0 0
  • 最近在做的項(xiàng)目是一個(gè)后臺管理系統(tǒng),涉及到多個(gè)表單的校驗(yàn)曹铃,頁面長這樣: 可以添加多個(gè)步驟缰趋,并且由于輸入項(xiàng)都為必填,點(diǎn)...
    草莓啊Pro閱讀 971評論 0 0