Leetcode - Reverse Linked List II

My code:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
public class Solution {
    public ListNode reverseBetween(ListNode head, int m, int n) {
        if (head == null || m <= 0 || n <= 0 || m > n)
            return null;
        else if (head.next == null || m == n)
            return head;
        int counter = 1;
        ListNode dummy = new ListNode(Integer.MIN_VALUE);
        dummy.next = head;
        ListNode temp = dummy.next;
        ListNode preM = null;
        ListNode M = null;
        ListNode N = null;
        ListNode preTemp = dummy;
        while (temp != null) {
            if (counter == m) {
                preM = preTemp;
                M = temp;
                break;
            }
            counter++;
            temp = temp.next;
            preTemp = preTemp.next;
        }
        temp = temp.next;
        ListNode tempM = M;
        for (int i = m + 1; i <= n; i++) {
            if (i == n)
                N = temp;
            ListNode p = temp.next;
            temp.next = tempM;
            tempM = temp;
            temp = p;
        }
        preM.next = N;
        M.next = temp;
        return dummy.next;
    }
    
    public static void main(String[] args) {
        Solution test = new Solution();
        ListNode n1 = new ListNode(1);
        ListNode n2 = new ListNode(2);
        ListNode n3 = new ListNode(3);
        ListNode n4 = new ListNode(4);
        ListNode n5 = new ListNode(5);
        n1.next = n2;
        n2.next = n3;
        n3.next = n4;
        n4.next = n5;
        System.out.println(test.reverseBetween(n1, 1, 4));
        
    }
}

My test result:

Paste_Image.png

這道題目一開始理解錯題意了奏甫。庸娱。真是啃爹。
然后港华,以前反轉(zhuǎn)鏈表暖璧,我都是遞歸做的嘿架。
沒想到可以直接一遍反轉(zhuǎn)挪钓,學(xué)習(xí)了河质。

dummy.next = head;
preTemp = head;
temp = head.next;
head.next = null;
while (temp != null) {
    ListNode p = temp.next;
    temp.next = preTemp;
    preTemp = temp;
    temp = p;
}
dummy.next = preTemp;
return dummy.next;

差不多就該長這個樣子。

代碼寫的還是很丑蔑歌。
下面是重點阴颖。
我發(fā)現(xiàn),當(dāng)我使用了如下模型丐膝,
pre -> curr -> post
之后,大多數(shù)鏈表中的刪除結(jié)點钾菊,反轉(zhuǎn)操作帅矗。我都可以很順暢的寫下來!
一定要記住這個辦法煞烫。
代碼如下:

public class Solution {
    public ListNode reverseBetween(ListNode head, int m, int n) {
        if (head == null || m <= 0 || n <= 0 || m > n)
            return null;
        else if (head.next == null || m == n)
            return head;
        int count = 0;
        ListNode dummy = new ListNode(-1);
        dummy.next = head;
        ListNode pre = null;
        ListNode curr = dummy;
        while (curr.next != null) {
            pre = curr;
            curr = curr.next;
            count++;
            if (count == m)
                break;
        }
        
        ListNode post = curr.next;
        curr.next = null;
        for (int i = m; i < n; i++) {
            ListNode temp = post.next;
            post.next = curr;
            curr = post;
            post = temp;
        }
        
        pre.next.next = post;
        pre.next = curr;
        return dummy.next;
    }
}

**
總結(jié): 反轉(zhuǎn)鏈表浑此,非遞歸,一遍過滞详。
**

Anyway, Good luck, Richardo!

My code:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
public class Solution {
    public ListNode reverseBetween(ListNode head, int m, int n) {
        if (head == null || head.next == null)
            return head;
        /** assume m and n are under rules */
        int counter = 0;
        ListNode dummy = new ListNode(-1);
        dummy.next = head;
        ListNode curr = head;
        ListNode pre = dummy;
        while (curr != null) {
            counter++;
            if (counter == m)
                break;
            else {
                pre = curr;
                curr = curr.next;
            }
        }
        ListNode post = curr.next;
        while (post != null) {
            counter++;
            if (counter <= n) {
                ListNode temp = post.next;
                post.next = curr;
                curr = post;
                post = temp;
            }
            else
                break;
        }
        pre.next.next = null;
        if (post != null)
            pre.next.next = post;
        pre.next = curr;
        return dummy.next;
    }
}

采用了 dummy node + 反轉(zhuǎn)鏈表凛俱。不難紊馏。有點小煩。

Anyway, Good luck, Richardo!

My code:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
public class Solution {
    public ListNode reverseBetween(ListNode head, int m, int n) {
        if (head == null || m > n) {
            return null;
        }
        
        ListNode dummy = new ListNode(-1);
        dummy.next = head;
        
        ListNode pre = dummy;
        ListNode curr = dummy.next;
        int counter = 1;
        ListNode pre_m = null;
        while (curr != null) {
            if (counter == m) {
                pre_m = pre;
                break;
            }
            pre = curr;
            curr = curr.next;
            counter++;
        }
        
        ListNode curr_next = curr.next;
        for (int i = 0; i < n - m; i++) {
            ListNode next = curr_next.next;
            curr_next.next = curr;
            curr = curr_next;
            curr_next = next;
        }
        
        ListNode pre_m_next = pre_m.next;
        pre_m.next = curr;
        pre_m_next.next = curr_next;
        return dummy.next;
    }
}

一開始理解錯題意了蒲犬,以為要 replace,其實是reverse部分鏈表朱监。
然后有點麻煩吧。勉強多次提交做出來了原叮。赫编。

Anyway, Good luck, Richardo! --- 08/15/2016

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市奋隶,隨后出現(xiàn)的幾起案子擂送,更是在濱河造成了極大的恐慌,老刑警劉巖唯欣,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嘹吨,死亡現(xiàn)場離奇詭異,居然都是意外死亡境氢,警方通過查閱死者的電腦和手機蟀拷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來产还,“玉大人匹厘,你說我怎么就攤上這事∑昵” “怎么了愈诚?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長牛隅。 經(jīng)常有香客問我炕柔,道長,這世上最難降的妖魔是什么媒佣? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任匕累,我火速辦了婚禮,結(jié)果婚禮上默伍,老公的妹妹穿的比我還像新娘欢嘿。我一直安慰自己,他們只是感情好也糊,可當(dāng)我...
    茶點故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布炼蹦。 她就那樣靜靜地躺著,像睡著了一般狸剃。 火紅的嫁衣襯著肌膚如雪掐隐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天钞馁,我揣著相機與錄音虑省,去河邊找鬼匿刮。 笑死,一個胖子當(dāng)著我的面吹牛探颈,可吹牛的內(nèi)容都是我干的熟丸。 我是一名探鬼主播,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼膝擂,長吁一口氣:“原來是場噩夢啊……” “哼虑啤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起架馋,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤狞山,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后叉寂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體萍启,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年屏鳍,在試婚紗的時候發(fā)現(xiàn)自己被綠了勘纯。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡钓瞭,死狀恐怖驳遵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情山涡,我是刑警寧澤堤结,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布,位于F島的核電站鸭丛,受9級特大地震影響竞穷,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜鳞溉,卻給世界環(huán)境...
    茶點故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一瘾带、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧熟菲,春花似錦看政、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至贞绵,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間恍飘,已是汗流浹背榨崩。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工谴垫, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人母蛛。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓翩剪,卻偏偏與公主長得像,于是被迫代替她去往敵國和親彩郊。 傳聞我的和親對象是個殘疾皇子前弯,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,724評論 2 351

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

  • My code: My test result: 這次作業(yè)說實話不難,但是要完全寫出來還是有點細節(jié)的秫逝。首先恕出,一開始...
    Richardo92閱讀 446評論 1 1
  • My code: 這道題目不難,但是很煩违帆。自己也沒能做出來浙巫。剛剛才分析過插入排序的,但是一旦涉及到鏈表刷后,就好復(fù)雜的畴。...
    Richardo92閱讀 459評論 0 1
  • My code: 一開始我覺得,這道題目簡單嗎尝胆?我寫了有點時間丧裁,也不是一次性過。我的做法就是現(xiàn)場直接進行交換含衔,一遍...
    Richardo92閱讀 674評論 0 0
  • My code: My test result: 這道題目我一開始想用異或來做煎娇,后來發(fā)現(xiàn)錯的,即使一個數(shù)字出現(xiàn)了偶...
    Richardo92閱讀 398評論 0 1
  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗抱慌。 張土汪:刷leetcod...
    土汪閱讀 12,740評論 0 33