LeetCode之刪除鏈表的倒數(shù)第 N 個結(jié)點
前言
我們社區(qū)陸續(xù)會將顧毅(Netflix 增長黑客,《iOS 面試之道》作者,ACE 職業(yè)健身教練。微博:@故胤道長[1])的 Swift 算法題題解整理為文字版以方便大家學習與閱讀。
LeetCode 算法到目前我們已經(jīng)更新了 18 期,我們會保持更新時間和進度(周一、周三、周五早上 9:00 發(fā)布),每期的內(nèi)容不多,我們希望大家可以在上班路上閱讀,長久積累會有很大提升。
不積跬步,無以至千里;不積小流,無以成江海,Swift社區(qū) 伴你前行。
難度水平:中等
1. 描述
給你一個鏈表,刪除鏈表的倒數(shù)第 n 個結(jié)點,并且返回鏈表的頭結(jié)點。
2. 示例
示例 1
- 輸入:head = [1,2,3,4,5], n = 2
- 輸出:[1,2,3,5]
示例 2
- 輸入:head = [1], n = 1
- 輸出:[]
示例 3
- 輸入:head = [1,2], n = 1
- 輸出:[1]
約束條件:
- 鏈表中結(jié)點的數(shù)目為 sz
- 1 <= sz <= 30
- 0 <= Node.val <= 100
- 1 <= n <= sz
3. 答案
- class RemoveNthFromEnd {
- func removeNthFromEnd(_ head: ListNode?, _ n: Int) -> ListNode? {
- let dummy = ListNode(0)
- dummy.next = head
- var prev: ListNode? = dummy
- var post: ListNode? = dummy
- // move post
- for _ in 0..<n {
- post = post!.next
- }
- // move prev and post at the same time
- while post!.next != nil {
- prev = prev!.next
- post = post!.next
- }
- prev!.next = prev!.next!.next
- return dummy.next
- }
- }
- 主要思想:運動員技術(shù)
- 時間復雜度:O(n)
- 空間復雜度:O(1)
該算法題解的倉庫:LeetCode-Swift[2]
點擊前往 LeetCode[3] 練習
關(guān)于我們Swift社區(qū)是由 Swift 愛好者共同維護的公益組織,我們在國內(nèi)以微信公眾號的運營為主,我們會分享以 Swift實戰(zhàn)、SwiftUl、Swift基礎(chǔ)為核心的技術(shù)內(nèi)容,也整理收集優(yōu)秀的學習資料。
參考資料
[1] @故胤道長:
https://m.weibo.cn/u/1827884772
[2] LeetCode-Swift:
https://github.com/soapyigu/LeetCode-Swift
[3] LeetCode:
https://leetcode.com/problems/remove-nth-node-from-end-of-list/