List類題型:Remove Nth Node from end of List

Remove the Nth Node from end of List

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.

難點: 你不知道這個list總共多長,如果只能一次pass的話,怎么知道倒數(shù)第幾個在哪?

這個是一個很巧妙的雙指針類型題目。

假設(shè)我們有兩個指針,一個跑的快,一個跑的慢。假設(shè)兩者跑步速度一樣快,但是出發(fā)的時候快指針比滿指針早出發(fā)n步。 那么快指針到end of List的時候,慢指針就剛好在倒數(shù)第n個node。


還有Tricky的點在于: 要設(shè)立一個fake node. 這個算是一個edge case, 假設(shè) ?1->null. remove 倒數(shù)第一個node。 那么很不好辦, 因為fast 指針跑到Null那個位置,slow指向1的話 ?沒辦法返回去一個Null list。你總不能讓slow自己cancel自己吧。 所以只能用一個fake node來解決這個問題。

也就是,我們的起跑線不從第一個node開始,而是從fake node開始。

ListNode start = new ListNode(0);

ListNode slow = start, fast = start;

slow.next = head;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容