19. Remove Nth Node From End of List
Leetcode
題目
Input: head = [1,2,3,4,5], n = 2
Output: [1,2,3,5]Input: head = [1], n = 1
Output: []Input: head = [1,2], n = 1
Output: [1]解答
Last updated
Input: head = [1,2,3,4,5], n = 2
Output: [1,2,3,5]Input: head = [1], n = 1
Output: []Input: head = [1,2], n = 1
Output: [1]Last updated
var removeNthFromEnd = function(head, n) {
// 只有一個元素的狀況,刪掉一個等於 null
if(!head.next) return null;
const map = new Map();
let i = 1;
let pointer = head;
while(head) {
map.set(i, head);
i++;
head = head.next;
}
const lastNode = map.get(i-n-1);
if (lastNode) {
lastNode.next = lastNode.next.next;
return pointer;
} else {
// lastNode 不存在,代表要刪掉的是第一個元素
return pointer.next;
}
};var removeNthFromEnd = function(head, n) {
if(!head.next) return null;
let i = 0;
let pointer = head;
while(head) {
i++;
head = head.next;
}
i = i - n - 1;
head = pointer;
// 代表要刪掉的是第一個元素
if(i<0) return pointer.next;
while(i) {
head = head.next;
i--;
}
head.next = head.next.next;
return pointer;
};var removeNthFromEnd = function(head, n) {
let first = head;
let second = head;
let i = 0;
while(first) {
// 當 firstNode 走到超過 n 時,secondNode 再一起往前走
if(i > n) {
second = second.next;
}
first = first.next;
i++
}
// 代表要刪掉的是第一個元素
if(i===n) return head.next;
second.next = second.next.next;
return head;
};