LeetCode No.19 Remove Nth Node From End of List | #Linked-list

Q:

Given a linked list, remove the nth node from the end of list and return its head.
For example, Given linked list: 1->2->3->4->5, and n = 2.
After removing the second node from the end, the linked list becomes 1->2->3->5.

A:

(寫在最前面:兩種解法都特別要注意對dummy node和null node的處理)

一個指向(指針)可训,跑兩遍鏈表:

public ListNode removeNthNode (ListNode node, int n){
    ListNode dummy = new ListNode(0); //防止原鏈表第一個node被刪除
    int length = 0;
    int beforeTarget = 0; //定位到要刪除的node之前的node
    dummy.next = head;
    ListNode first = head;

    while(first != null){
         length ++;
         first = first.next; //指向null為止
    }
    
    beforeTarget = length - n;
    first = dummy;

    while (beforeTarget > 0){
        beforeTarget --;
        first = first.next煌抒;//重新走一遍豌熄,走到要刪除的node之前的node停止
    }
    
    first.next = first.next.next;
    return dummy.next;
}

.
如果鏈表里只有一個node:那么第一個while不執(zhí)行,計算beforeTarget時為負值东臀,第二個while也不執(zhí)行,執(zhí)行first.next = first.next.next相當(dāng)于是執(zhí)行dummy.next=dummy.next.next ( =null )。不管n是多少,這個鏈表都被刪干凈了直秆。
.
第一個while里面計數(shù)起點是帶著dummy鏈表里的第二個點,因為起點指向dummy.next鞭盟,但第二個while里面計數(shù)起點是從dummy開始的。
.
D -> 1 -> 2 -> 3 -> 4 -> 5 -> null
Length = 6瑰剃,n = 2齿诉, 那么要刪的實際上是index值為5 = (L-n+1) 的node,所以,我們要找的前后兩個node分別為:(L-n) 和 (L-n+2)粤剧,只考慮(L-n):beforeTarget = length - n;歇竟,因為(L-n+2)僅是個數(shù)學(xué)表達,它實際是通過.next.next來實現(xiàn)的抵恋。(一開始焕议,這種數(shù)學(xué)表達不太直觀,畫出圖弧关,按代碼邏輯多測幾組數(shù)據(jù)就好了盅安。)


兩個指針,firstsecond世囊,只跑了一遍鏈表:

public ListNode removeNthFromEnd(ListNode head, int n) {
    ListNode dummy = new ListNode(0);
    dummy.next = head; //其實參數(shù)head除了這里别瞭,后面都沒用到
    ListNode first = dummy;
    ListNode second = dummy;

    for (int i = 1; i <= n + 1; i++) {
        first = first.next; //第一個指針先跑,從head node開始跑
    }

    while (first != null) {
        first = first.next; //第一個指針跑到 null node 了株憾,停蝙寨!
        second = second.next; //maintaing the same gap, gap是(n+1)個鏈條(->)
    }
    second.next = second.next.next; //指定的node被刪了
    return dummy.next;
}

如果n=3,配個圖:


Notes:


由指針這件事嗤瞎,想到的Java和C++的區(qū)別:

.

  • Java有回收機制墙歪,就不需要析構(gòu)函數(shù)了(deconstructor)
  • Java沒有指針
  • Java不能多重繼承
  • Java的"123"是對象,C++中是const char*
  • Java不能操作符重載

ArrayList vs Linked-list(Dynamic data structure)

.
ArrayList包裝了一個Object[]贝奇,實例化的時候?qū)?yīng)一個數(shù)組虹菲,訪問通過.get(index),查找很方便弃秆,添加很麻煩届惋,塞一個進去,后面的位置都得挪菠赚,ArrayList是順序存儲脑豹,而Linked-list是鏈?zhǔn)酱鎯Γ@兩者都是Dynamic的 (Array是Static的)衡查。增刪數(shù)據(jù)LinkedList改節(jié)點的引用就好了瘩欺,方便。但是要遍歷節(jié)點拌牲,速度慢俱饿。

(Lewis·Loftus Java Textbook page 619): A dynamic data structure is implemented using links. Using references as links between objects, we can create whatever type of structure is appropriate for the situation. If implemented carefully, the structure can be quite efficient to search and modify. Structures created this way are considered to be dynamic, because their size is determined dynamically, as they are used, and not by their declaration.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市塌忽,隨后出現(xiàn)的幾起案子拍埠,更是在濱河造成了極大的恐慌,老刑警劉巖土居,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件枣购,死亡現(xiàn)場離奇詭異嬉探,居然都是意外死亡,警方通過查閱死者的電腦和手機棉圈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進店門涩堤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人分瘾,你說我怎么就攤上這事胎围。” “怎么了德召?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵白魂,是天一觀的道長。 經(jīng)常有香客問我氏捞,道長碧聪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任液茎,我火速辦了婚禮逞姿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘捆等。我一直安慰自己滞造,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布栋烤。 她就那樣靜靜地躺著谒养,像睡著了一般。 火紅的嫁衣襯著肌膚如雪明郭。 梳的紋絲不亂的頭發(fā)上买窟,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天,我揣著相機與錄音薯定,去河邊找鬼始绍。 笑死,一個胖子當(dāng)著我的面吹牛话侄,可吹牛的內(nèi)容都是我干的亏推。 我是一名探鬼主播,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼年堆,長吁一口氣:“原來是場噩夢啊……” “哼吞杭!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起变丧,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤芽狗,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后痒蓬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體童擎,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡曼月,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了柔昼。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡炎辨,死狀恐怖捕透,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情碴萧,我是刑警寧澤乙嘀,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站破喻,受9級特大地震影響虎谢,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜曹质,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一婴噩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧羽德,春花似錦几莽、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至姨夹,卻和暖如春纤垂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背磷账。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工峭沦, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人够颠。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓熙侍,卻偏偏與公主長得像,于是被迫代替她去往敵國和親履磨。 傳聞我的和親對象是個殘疾皇子蛉抓,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,629評論 2 354

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