题目: https://leetcode.com/problems/remove-nth-node-from-end-of-list/
概述: 给定一条链表和一个数字n,删除这条链表上倒数第n个元素。
思路: 如果非空,那么先找一个快指针,向前走两步,然后快慢指针一起走,快指针走到尽头,说明慢指针走到了倒数第二个。
/**
* 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) {
//如果是空的
if(!head)
return NULL;
//如果非空,那么先找一个快指针,向前走两步,然后快慢指针一起走,快指针走到尽头,说明慢指针走到了倒数第二个。
ListNode new_head(-1);
new_head.next = head;
ListNode *slow = &new_head;
ListNode *fast = &new_head;
for(int i = 0; i < n; i++)
{
fast = fast -> next;
}
//注意这里的写法是next,这样才能使fast指向最后一个
while(fast -> next)
{
fast = fast -> next;
slow = slow -> next;
}
ListNode *to_be_delete = slow -> next;
slow -> next = slow -> next ->next;
delete to_be_delete;
return new_head.next;
}
};