LeetCode之刪除鏈表的倒數第 N 個結點
前言
我們社區陸續會將顧毅(Netflix 增長黑客,《iOS 面試之道》作者,ACE 職業健身教練。微博:@故胤道長[1])的 Swift 算法題題解整理為文字版以方便大家學習與閱讀。
LeetCode 算法到目前我們已經更新了 18 期,我們會保持更新時間和進度(周一、周三、周五早上 9:00 發布),每期的內容不多,我們希望大家可以在上班路上閱讀,長久積累會有很大提升。
不積跬步,無以至千里;不積小流,無以成江海,Swift社區 伴你前行。
難度水平:中等
1. 描述
給你一個鏈表,刪除鏈表的倒數第 n 個結點,并且返回鏈表的頭結點。
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]
約束條件:
- 鏈表中結點的數目為 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
- }
- }
- 主要思想:運動員技術
- 時間復雜度:O(n)
- 空間復雜度:O(1)
該算法題解的倉庫:LeetCode-Swift[2]
點擊前往 LeetCode[3] 練習
關于我們Swift社區是由 Swift 愛好者共同維護的公益組織,我們在國內以微信公眾號的運營為主,我們會分享以 Swift實戰、SwiftUl、Swift基礎為核心的技術內容,也整理收集優秀的學習資料。
參考資料
[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/