/**
* 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) {
/**
双指针(p,q):
先用p 指针,前进到n + 1 的位置,然后p q 同时移动,当p.next = null 时 就删除q.next 此时所在的节点
*/
ListNode dummp = new ListNode();
dummp.next = head;
ListNode p = dummp;
ListNode q = dummp;
for (int i = 0; i < n; i++) {
p = p.next;
}
if (p == null) {
return p;
}
// 一起移动
while (p.next != null) {
q = q.next;
p = p.next;
}
if (q.next == null) { // 删除的时最后一个结点
q = null;
} else {
q.next = q.next.next;
}
return dummp.next;
}
}