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

示例 1:

https://assets.leetcode.com/uploads/2020/10/03/remove_ex1.jpg

输入:head = [1,2,3,4,5], n = 2
输出:[1,2,3,5]

示例 2:

输入:head = [1], n = 1
输出:[]

示例 3:

输入:head = [1,2], n = 1
输出:[1]

提示:

Untitled

Untitled

Untitled

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode p1 = head;
				// 因为删除元素,所以将初始的头Node 提前Head 一个节点
        ListNode dummy = new ListNode(-1); 
        ListNode result = dummy;
        dummy.next = head;
        // 先p1 走 n 步
        for (int i=0; i<n; i++){
            p1=p1.next;
        }
				//因为提前一个节点,所以走到 要删除 节点的前一个节点, 及下一个节点就是要杀出的节点
        while(p1 !=null ){
            p1=p1.next;
            dummy=dummy.next;
        }
				// 如果删除的姐姐的下一个节点不是Null 更改pointer to 要删除节点的下一个节点
        if(dummy.next.next !=null ){
            dummy.next = dummy.next.next;
        }
				//如果为Null 则直接将删除节点设置为null 
        else{
            dummy.next = null; 
        }
        return result.next;
    }
}