给你一个链表,删除链表的倒数第 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]
提示:
sz
1 <= sz <= 30
0 <= Node.val <= 100
1 <= n <= sz
/**
* 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;
}
}