題目描述:
https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/submissions/
思路:
快慢指針。
快指針先走n步,
如果快指針指向nullptr,則刪除的是第一個節點,返回head->next,
否則,快慢指針一起走,直到快指針走到尾巴,此時慢指針指向的下一個就是要刪除的節點,把慢指針的next移到下一個的下一個。返回頭結點。
代碼實現:
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
if(head == NULL) return NULL;
ListNode* fast = head, *slow = head;
for(int i = 0 ; i < n; i++) fast = fast->next;
if(!fast) return head->next;
while(fast->next){
fast = fast->next;
slow = slow->next;
}
slow->next = slow->next->next;
return head;
}
};