题目描述
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
示例
思想
使用快慢指针,快指针先走n+1个,紧着这快慢指针一起走,快指针到最后的时候,慢指针此时在倒数第n个结点的前一个。
注意:使用虚拟头结点,一定要返还dummy->next, 不要返回head,因为head所指向的元素可能被删除。
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
if(head==nullptr||head->next==nullptr) return NULL;
ListNode* dummyHead = new ListNode();
dummyHead->next = head;
ListNode* fast, * slow;
fast = dummyHead;
slow = dummyHead;
for(int i=0;i<=n;i++){
fast = fast->next;
}
while (fast!=NULL) {
fast = fast->next;
slow = slow->next;
}
slow->next = slow->next->next;
ListNode* ans = dummyHead->next;
delete dummy;
return ans;
}
};