/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode pre = new ListNode(0);
pre.next = head;
ListNode p = pre , p1 = pre;
while( n != 0 ){
p = p.next;
n--;
}
while(p.next != null){
p = p.next;
p1 = p1.next;
}
p1.next = p1.next.next;
return pre.next;
}
}
解题思想:首先用双指针 , n 为 两个指针的差 不过 差值 要加 1 因为(但是因为 从 自己构建的头结点开始所以说刚好弥补了, 加一 的说法)
然后只要将两个指针同一时间 向后进行 直到 前一个指针为0时 就将后一个指针 移动到的当前位置 进行删除 处理。