
链表题还是太简单了。
怕越界所以先定义了一个头结点的头结点,然后定义快慢指针,快指针先走n步,随后一起走,直到快指针走到头,删除慢指针后一个节点即可。
cpp
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode* h=new ListNode(0,head);
ListNode* slow=h;
ListNode* fast=h;
while(n--) fast=fast->next;
while(fast->next){
fast=fast->next;
slow=slow->next;
}
slow->next=slow->next->next;
return h->next;
}
};