19. 删除链表的倒数第 N 个结点 --力扣 --JAVA

题目

给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。

解题思路

  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;
        }
    }
}

你可能感兴趣的:(力扣练习,算法,数据结构)