题目
给你一个链表,删除链表的倒数第
n
个结点,并且返回链表的头结点。
解题思路
- 删除链表的倒数第n个节点,需要从链表末尾开始计数;
- 设立私有的全局变量用于统计;
- 因为是单向链表,所以需要通过递归获取需要删除的节点的上一个节点;
- 因为是倒置所以需要在递归后进行计数;
- 创建标志位区分特殊情况,需要删除的节点为首节点则无法获取上一节点;
- 在结果返回时判断是否为首节点。
代码展示
class Solution {private int index = 0;private boolean status = false;public ListNode removeNthFromEnd(ListNode head, int n) {removeNode(head, n);return status ? head : head.next;}public void removeNode(ListNode head, int n){if(head == null){return;}removeNode(head.next, n);index++;if(index - 1 == n){status = true;head.next = head.next.next;}}
}