删除链表中倒数第N个节点
解题思路:
- 遍历链表,获得链表的长度size
- 删除倒数第N个节点,就是删除第size-N个节点
c++
/**
* 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) {
int size = 0;
ListNode *r = head;
while(r != nullptr){
size++;
r = r->next;
}//这层循环是为了获取链表的长度
int s = size - n;//获取要删除的位置
r = head;
int index = 0;
while(r){
index++;
if(index == s){
r->next = r->next->next;//删除该节点
break;
}
if(s==0){
return head->next;//这种情况特判,删除的是头节点
}
r = r->next;
}
return head;
}
};