串列應用題 移除尾巴數來的第n個節點 Leetcode #19

閱讀時間約 3 分鐘
raw-image

這題的題目在這裡:

題目敘述

題目會給定我們一個串列,和一個n值,要求我們刪除尾巴數來的第n個節點

例如
1->2->3->4->5 和 給定n值=2,要求我們刪除尾巴數來的第2個節點。

尾巴數來的第2個節點是4,刪除之後,更新連結,輸出答案如下

1->2->3->5


測試範例

Example 1:

raw-image
Input: head = [1,2,3,4,5], n = 2
Output: [1,2,3,5]

Example 2:

Input: head = [1], n = 1
Output: []

Example 3:

Input: head = [1,2], n = 1
Output: [1]

演算法:

使用雙指針演算法,一個快指針,一個慢指針。

快指針提早領先出發n步,接著慢指針和快指針再一起往前移動。
當快指針抵達終點時,慢指針會剛好指向尾巴數來第n個節點的前一個位置。

註:
為什麼要尾巴數來第n個節點前一個位置?
因為不僅僅是刪除而已,還要更新連結 node.next

raw-image
raw-image
raw-image
raw-image

程式碼

class Solution:
 def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
  
  # use dummy head will make the removal of head node easier
  dummy_head = ListNode(-1)
  dummy_head.next = head
  
  # cur keeps iteration till the end
  # prev_of_removal traverses to the previous node of the one of being removed
  cur, prev_of_removal = dummy_head, dummy_head
  
  
  while cur.next != None:
   
   # n-step delay for prev_of_removal
   if n <= 0:
    prev_of_removal = prev_of_removal.next
    
   cur = cur.next
   
   n -=1
  
  
  # Remove the N-th node from end of list
  n_th_node = prev_of_removal.next
  prev_of_removal.next = n_th_node.next
  
  del n_th_node
  
  return dummy_head.next

複雜度分析

時間複雜度: O( n )
從左到右,把整個串列掃描一遍。

空間複雜度: O( 1 )
用到一組雙指針,指針所占用的空間大小都是固定的,為常數級別O(1)。


關鍵知識點

在於畫圖觀察規律,想到用快、慢雙指針,快指針領先慢指針n步,定位尾巴數來第n個節點的演算法。


Reference:

[1] Python/Go/JS/C++ O(n) by two-pointers [w/ Visualization] - Remove Nth Node From End of List - LeetCode

81會員
417Content count
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
發表第一個留言支持創作者!
題目會給定我們一個n值,問我們n! 也就是n階乘 尾巴的零有多少個? 例如n=5 就是代表5! = 5x4x3x2x1=120 尾巴有一個零,回傳1
題目會給定一組已經規定好的介面interface,要求我們實作HashSet這種資料結構。也就是一般數學和程式語言中所說的"集合"。
題目會給我們兩條已經從小到大排序好的串列,要求我們依照從小到大的順序,合併這兩條串列。
題目會給定一組輸入陣列,裡面每個參數分別代表矩陣的寬和高。 如果有兩個矩陣的寬/高的比例是相同的,代表這兩個矩陣是等比例的。 要求我們計算,等比例的矩陣pair總共有多少個?
題目會給定我們一個輸入陣列,要求我們計算好配對的數目有多少個? 好配對的定義: 兩個數字相同,但是陣列索引一個在前,一個在後。 nums[i] == nums[j] and i < j. 這樣 (i, j) 就稱為一組好配對。
題目會給定我們一個陣列和參數k,要求我們將陣列右旋k次,然後輸出內容。 例如[1,2,3,4,5] 右旋 2次,輸出就是[4,5,1,2,3]
題目會給定我們一個n值,問我們n! 也就是n階乘 尾巴的零有多少個? 例如n=5 就是代表5! = 5x4x3x2x1=120 尾巴有一個零,回傳1
題目會給定一組已經規定好的介面interface,要求我們實作HashSet這種資料結構。也就是一般數學和程式語言中所說的"集合"。
題目會給我們兩條已經從小到大排序好的串列,要求我們依照從小到大的順序,合併這兩條串列。
題目會給定一組輸入陣列,裡面每個參數分別代表矩陣的寬和高。 如果有兩個矩陣的寬/高的比例是相同的,代表這兩個矩陣是等比例的。 要求我們計算,等比例的矩陣pair總共有多少個?
題目會給定我們一個輸入陣列,要求我們計算好配對的數目有多少個? 好配對的定義: 兩個數字相同,但是陣列索引一個在前,一個在後。 nums[i] == nums[j] and i < j. 這樣 (i, j) 就稱為一組好配對。
題目會給定我們一個陣列和參數k,要求我們將陣列右旋k次,然後輸出內容。 例如[1,2,3,4,5] 右旋 2次,輸出就是[4,5,1,2,3]
你可能也想看
Thumbnail
1.加權指數與櫃買指數 週五的加權指數在非農就業數據開出來後,雖稍微低於預期,但指數仍向上噴出,在美股開盤後於21500形成一個爆量假突破後急轉直下,就一路收至最低。 台股方面走勢需觀察週一在斷頭潮出現後,週二或週三開始有無買單進場支撐,在沒有明確的反轉訊號形成前,小夥伴盡量不要貿然抄底,或是追空
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
讀《聲入Spotify》這本書時,透過Spotify這個案例,我特別想要了解兩個問題:一是「免費增值」(freemium)的商業模式;也就是串流平台盡可能的提供免費服務給顧客,再吸引顧客付費購買額外功能的營利方式。第二個則是公司和創作者之間可能產生的爭議。
Thumbnail
前面提到變數為程式儲存資料的地方,一個變數可以儲存一個學生的成績、一個人的身高、或是一個人名等,但如果多人的資料要管理,為每個人設計一個變數顯然就有點不切實際,串列就是用來解決這樣的問題。
Thumbnail
《#地獄公使》簡直現代變形記。《#洛基》影集超展開,超奇幻,超引人入勝。《#喜歡是深深的愛》這本小說完全打中了我。沒想到《#駭客軍團》可以出現在串流平台。《#守望者》對我來說已經是藝術品。克蘇魯始祖 #Lovecraft 的翻譯小說真的精彩。但是串流平台實在太邪惡!
Thumbnail
先前說過《天橋上的魔術師》是帶著2020的批判目光回望那個既是都市化經濟奇蹟、卻也保守威權並存的80年代,對威權政治與性別政治的反思成為導演楊雅喆一雙利刃,直指80年代的輝煌與虛妄。很多人也許會問,為什麼要這樣處理呢?
Thumbnail
前言:每週在音樂、演出產業都有新鮮事在發生,儘管受到 2020 年大似肆虐的新冠病毒 COVID-19 影響,讓 Live 表演現場受到巨大毀滅性的打擊,但相關從業者大多都還在努力的生存著,保持樂觀,積極期待烏雲邊的那一道 Silver Lining 重新綻放希望。每週摘選值得關注的海內外新聞在此專
Thumbnail
前言:每週在音樂、演出產業都有新鮮事在發生,儘管受到 2020 年大似肆虐的新冠病毒 COVID-19 影響,讓 Live 表演現場受到巨大毀滅性的打擊,但相關從業者大多都還在努力的生存著,保持樂觀,積極期待烏雲邊的那一道 Silver Lining 重新綻放希望。每週摘選值得關注的海內外新聞在此專
Thumbnail
串流影音無疑的是新冠肺炎疫情下最大受惠的產業之一,然而在這個市場,一場大戰也已經開打。由網飛佔據的王位,未來是否有機會被 Disney+ 所搶下?而 HBO Max 孤注一擲的策略,能幫他們贏得未來嗎?
Thumbnail
近年來「訂閱經濟」已經成了「風口上的豬」在音樂、影視、軟體等領域;都已出現領頭羊。Spotify 是這些巨頭之中,唯一發源於歐洲的科技公司,2013 年起訂閱 Spotify 的用戶飛速增長,它的發展與潛力如何?讓鬼宿帶大家從不同的視野,深度認識這家;來自瑞典的串流音樂巨頭。
Thumbnail
根據《2019年音樂聆聽報告》指出全球有高達89%的用户透過點播串流媒體來收聽各式各樣不同種類的音樂,串流媒體成為時下最夯的一個產業,商機無窮,到底串流音樂平台具有什麼樣的魔力,能改變人們與音樂的互動模式呢?
Thumbnail
1.加權指數與櫃買指數 週五的加權指數在非農就業數據開出來後,雖稍微低於預期,但指數仍向上噴出,在美股開盤後於21500形成一個爆量假突破後急轉直下,就一路收至最低。 台股方面走勢需觀察週一在斷頭潮出現後,週二或週三開始有無買單進場支撐,在沒有明確的反轉訊號形成前,小夥伴盡量不要貿然抄底,或是追空
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
讀《聲入Spotify》這本書時,透過Spotify這個案例,我特別想要了解兩個問題:一是「免費增值」(freemium)的商業模式;也就是串流平台盡可能的提供免費服務給顧客,再吸引顧客付費購買額外功能的營利方式。第二個則是公司和創作者之間可能產生的爭議。
Thumbnail
前面提到變數為程式儲存資料的地方,一個變數可以儲存一個學生的成績、一個人的身高、或是一個人名等,但如果多人的資料要管理,為每個人設計一個變數顯然就有點不切實際,串列就是用來解決這樣的問題。
Thumbnail
《#地獄公使》簡直現代變形記。《#洛基》影集超展開,超奇幻,超引人入勝。《#喜歡是深深的愛》這本小說完全打中了我。沒想到《#駭客軍團》可以出現在串流平台。《#守望者》對我來說已經是藝術品。克蘇魯始祖 #Lovecraft 的翻譯小說真的精彩。但是串流平台實在太邪惡!
Thumbnail
先前說過《天橋上的魔術師》是帶著2020的批判目光回望那個既是都市化經濟奇蹟、卻也保守威權並存的80年代,對威權政治與性別政治的反思成為導演楊雅喆一雙利刃,直指80年代的輝煌與虛妄。很多人也許會問,為什麼要這樣處理呢?
Thumbnail
前言:每週在音樂、演出產業都有新鮮事在發生,儘管受到 2020 年大似肆虐的新冠病毒 COVID-19 影響,讓 Live 表演現場受到巨大毀滅性的打擊,但相關從業者大多都還在努力的生存著,保持樂觀,積極期待烏雲邊的那一道 Silver Lining 重新綻放希望。每週摘選值得關注的海內外新聞在此專
Thumbnail
前言:每週在音樂、演出產業都有新鮮事在發生,儘管受到 2020 年大似肆虐的新冠病毒 COVID-19 影響,讓 Live 表演現場受到巨大毀滅性的打擊,但相關從業者大多都還在努力的生存著,保持樂觀,積極期待烏雲邊的那一道 Silver Lining 重新綻放希望。每週摘選值得關注的海內外新聞在此專
Thumbnail
串流影音無疑的是新冠肺炎疫情下最大受惠的產業之一,然而在這個市場,一場大戰也已經開打。由網飛佔據的王位,未來是否有機會被 Disney+ 所搶下?而 HBO Max 孤注一擲的策略,能幫他們贏得未來嗎?
Thumbnail
近年來「訂閱經濟」已經成了「風口上的豬」在音樂、影視、軟體等領域;都已出現領頭羊。Spotify 是這些巨頭之中,唯一發源於歐洲的科技公司,2013 年起訂閱 Spotify 的用戶飛速增長,它的發展與潛力如何?讓鬼宿帶大家從不同的視野,深度認識這家;來自瑞典的串流音樂巨頭。
Thumbnail
根據《2019年音樂聆聽報告》指出全球有高達89%的用户透過點播串流媒體來收聽各式各樣不同種類的音樂,串流媒體成為時下最夯的一個產業,商機無窮,到底串流音樂平台具有什麼樣的魔力,能改變人們與音樂的互動模式呢?