题目

解题思路

  1. 删除链表的倒数第n个节点,需要从链表末尾开始计数;
  2. 设立私有的全局变量用于统计;
  3. 因为是单向链表,所以需要通过递归获取需要删除的节点的上一个节点;
  4. 因为是倒置所以需要在递归后进行计数;
  5. 创建标志位区分特殊情况,需要删除的节点为首节点则无法获取上一节点;
  6. 在结果返回时判断是否为首节点。

代码展示

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;
        }
    }
}
11-30 21:13