解題思路
不用 reverse 就能刪倒數第 n 個節點,只要用 two pointer。left pointer 跟 right pointer 不是平常的差一個,而是差 n 個節點。如此一來,當 right pointer 指向 null 時,left pointer 指到的恰好就是我們想要刪掉的節點。
但真正方便的是指向要刪掉的前一個節點,這樣才能進行刪除。為了達成此目標,選擇 left node 一開始指向 dummy node。
程式碼
class Solution { public: ListNode* removeNthFromEnd(ListNode* head, int n) { ListNode *dummy = new ListNode(); ListNode *left = dummy, *right = head; dummy->next = head; for(int i=0; i<n; i++) right = right->next; while(right != nullptr) { left = left->next; right = right->next; } left->next = left->next->next; return dummy->next; } };
沒有留言:
張貼留言