【演算法設計與分析作業題】第十週:19. Remove Nth Node From End of List
阿新 • • 發佈:2019-01-28
題目
C++ solution
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* removeNthFromEnd(ListNode* head, int n) { ListNode* p = new ListNode(0); p->next = head; ListNode* first = p; ListNode* second = p; for (int i = 0; i < n + 1; ++i) { first = first->next; } while (first != NULL) { first = first->next; second = second->next; } second->next = second->next->next; return p->next; } };
簡要題解
- 新建一個節點 p 指向 head,處理特殊情況(如刪除 head 節點的情況)
- 新建 first 和 second 兩個指標指向 p,先單獨移動 first 指標使兩個指標的距離為 n+1,然後同步移動這兩個指標,當 first 指標移動到 list 尾部時(等於 NULL),second 指標指向倒數第 n+1 個 Node,使用 second->next = second->next->next 即可移除倒數第 n 個 Node。