1、题目描述
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
示例 1:
输入:head = [1,2,3,4,5], n = 2
输出:[1,2,3,5]
示例 2:
输入:head = [1], n = 1
输出:[]
示例 3:
输入:head = [1,2], n = 1
输出:[1]
2、思路
递归
从尾节点开始,计数,计数到 n 时,跳过第 n 个节点,直接返回倒数 n - 1 节点
class Solution {
public:
ListNode* DeleteListNode(ListNode* list , int& count , int n){
if(list == nullptr){
return nullptr;
}
//递归
list -> next = DeleteListNode(list -> next, count, n);
//匹配 倒数 N 个以内的节点
if(list -> next == nullptr || count < n&&count > 0){
count++;
if(count == n){
//匹配到倒数N个节点,直接返回它的下一个节点
return list -> next;
}
return list;
}
return list;
}
ListNode* removeNthFromEnd(ListNode* head, int n) {
int count = 0;
return DeleteListNode(head, count, n);
}
};```
**整理不易 你的点赞、关注是对我莫大的鼓励**
![在这里插入图片描述](https://img-blog.csdnimg.cn/8f783e0396be49ebbe3c93150aae99f3.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pivIFRoZSBMaW4g5ZGA,size_15,color_FFFFFF,t_70,g_se,x_16#pic_center)