删除链表的倒数第N个节点
给你一个链表,删除倒数第N个节点,返回链表头节点
解题代码
思路:使用双指针法,一个指针先往后走n步,然后两个指针同时走。直到先走了n步的节点走到链表结尾时,这时另外一个指针距离尾节点的距离就是n。
var removeNthFromEnd = function(head, n) {
if (!head) return null;
let ret = new ListNode(-1,head); // 虚头
let p = ret;
let q = head; // 头指针
while (n--) q = q.next; // 先走n步
while (q) { // 同时走,直至链表尾部
q = q.next;
p = p.next;
}
p.next = p.next.next; // 将p节点的下一位指向下下位,这时就跳过了n。因为 n = p.next;
return ret.next; // 返回链表头节点
};