206. Reverse Linked List

Reverse a singly linked list(單鏈表).

剛看了覃超的直播,有點晚了,今天寫個easy題睡覺虚青。

下面的題解引用editorial的菱涤。

Approach #1 (Iterative) [Accepted]

Assume that we have linked list 1 → 2 → 3 → ?, we would like to change it to ? ← 1 ← 2 ← 3.

While you are traversing the list, change the current node's next pointer to point to its previous element. Since a node does not have reference to its previous node, you must store its previous element beforehand. You also need another pointer to store the next node before changing the reference. Do not forget to return the new head reference at the end!

    public ListNode reverseList(ListNode head) {
        if (head == null) return null;
        ListNode prev = null;
        ListNode curr = head;
        while (curr != null) {
            ListNode next = curr.next;
            curr.next = prev;
            prev = curr;
            curr = next;
        }
        return prev;
    }

Approach #2 (Recursive) [Accepted]

The recursive version is slightly trickier and the key is to work backwards. Assume that the rest of the list had already been reversed, now how do I reverse the front part? Let's assume the list is: n1 → … → nk-1 → nk → nk+1 → … → nm → ?

Assume from node nk+1 to nm had been reversed and you are at node nk.

n1 → … → nk-1 → nk → nk+1 ← … ← nm

We want nk+1’s next node to point to nk.

So,

nk.next.next = nk;

Be very careful that n1's next must point to ?. If you forget about this, your linked list has a cycle in it. This bug could be caught if you test your code with a linked list of size 2.

public ListNode reverseList(ListNode head) {
    if (head == null || head.next == null) return head;
    ListNode p = reverseList(head.next);
    head.next.next = head;
    head.next = null;
    return p;
}

這遞歸又把我繞暈了苞也。調試了一下勉強理解了:

My thought:

在if語句的return之前, head會指向最后一個結點(p->next == null了),所以p會指向最后一個節(jié)點;然后就返回到上一層遞歸粘秆,這時候head已經不是最后一個節(jié)點了如迟,而是倒數第二個節(jié)點。然后把p指向head翻擒。head.next=null氓涣,不然會產生環(huán)。再返回逆序后的首節(jié)點p陋气。至于為什么每次都返回p劳吠,想不清了,暫時就只要想因為我們最終就需要返回p巩趁。


覃超直播的筆記:

clarification:邊界條件痒玩,極端情況問清
possible solutions: 想明白,比較各種解法议慰,想出最優(yōu)的蠢古;菜b和牛b的區(qū)別
coding
test cases

遞歸不要想很多層,會把自己繞暈别凹;只要想一層草讶,要知道后面的事它會做好

問考官會不會null,會不會太長炉菲;開始coding永遠檢查是否是合法的

寫堕战,多寫

prefer遞歸

1.01^365次方 37倍

遞歸里很多if判斷可能是不需要的
時間復雜度,空間復雜度非常非常重要

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末拍霜,一起剝皮案震驚了整個濱河市嘱丢,隨后出現的幾起案子,更是在濱河造成了極大的恐慌祠饺,老刑警劉巖越驻,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡缀旁,警方通過查閱死者的電腦和手機记劈,發(fā)現死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來诵棵,“玉大人抠蚣,你說我怎么就攤上這事÷陌模” “怎么了嘶窄?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長距贷。 經常有香客問我柄冲,道長,這世上最難降的妖魔是什么忠蝗? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任现横,我火速辦了婚禮,結果婚禮上阁最,老公的妹妹穿的比我還像新娘戒祠。我一直安慰自己,他們只是感情好速种,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布姜盈。 她就那樣靜靜地躺著,像睡著了一般配阵。 火紅的嫁衣襯著肌膚如雪馏颂。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天棋傍,我揣著相機與錄音救拉,去河邊找鬼。 笑死瘫拣,一個胖子當著我的面吹牛亿絮,可吹牛的內容都是我干的。 我是一名探鬼主播麸拄,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼派昧,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了感帅?” 一聲冷哼從身側響起斗锭,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤地淀,失蹤者是張志新(化名)和其女友劉穎失球,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡实苞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年豺撑,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片黔牵。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡聪轿,死狀恐怖,靈堂內的尸體忽然破棺而出猾浦,到底是詐尸還是另有隱情陆错,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布金赦,位于F島的核電站音瓷,受9級特大地震影響,放射性物質發(fā)生泄漏夹抗。R本人自食惡果不足惜绳慎,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望漠烧。 院中可真熱鬧杏愤,春花似錦、人聲如沸已脓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽摆舟。三九已至亥曹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間恨诱,已是汗流浹背媳瞪。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留照宝,地道東北人蛇受。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像厕鹃,于是被迫代替她去往敵國和親兢仰。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內容