力扣试题–19. 删除链表的倒数第 N 个结点(js版本)
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
// 这道题思路是正确的,但是每次链表的时候,那个 next
// 就是分不清楚啥时候使用,难受的很
// 每次原链表需要改动什么的时候,不要直接在原链表上直接改,要new 一个指针,指向他的头节点,另开一个空间
/**
* @param {ListNode} head
* @param {number} n
* @return {ListNode}
*/
function ListNode(val, next) {
this.val = (val === undefined ? 0 : val)
this.next = (next === undefined ? null : next)
}
// 得到链表的长度
var get_len = function (head) {
let p = head;
let len = 0;
while (p) {
p = p.next;
len++;
}
console.log(len);
return len;
}
var removeNthFromEnd = function (head, n) {
let len = get_len(head);
let r = len - n;
let i = 0;
let head1 = new ListNode(0, head); // 新开一个空间,不要在原来的链表上改
let p = head1;
while (i < r ) {
p = p.next;
i++;
}
p.next = p.next.next;
return head1.next;
};
removeNthFromEnd([1, 2, 3, 4, 5], 2);
|