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);
}
};```
**整理不易 你的点赞、关注是对我莫大的鼓励**
