思路:
1.建立哑节点(虚拟节点,哨兵节点)
可以让头节点跟普通节点一样进行处理
2.让第二个指针走比第一个指针先走n步
3.n2指针不指向null时让n1和n2同时前进一位
4.让n1指针所指的节点的next指向下下一个节点
删除链表中的节点就是取消当前节点和上一个节点的引用
5.返回哑节点的下一个节点
从head节点开始
// 伪代码如下
var removeNthFormEnd = function (head, n) {
let dummy = new ListNode();
dummy.next = head;
let n1 = dummy;
let n2 = dummy;
for (let i = 0; i <= n; i++) {
n2 = n2.next;
}
while (n2 !== null) {
n1 = n1.next;
n2 = n2.next;
}
n1.next = n1.next.next;
return dummy.next;
};