方法一:两次while循环,第一次查询链表的长度,第二次将倒数第n个节点删除。
var removeNthFromEnd = function(head, n) {
let cur = head;
let idx = 0;
while(cur){
idx++;
cur = cur.next;
}
if(idx===n)return head.next;
idx-=n;
let idx2 = 0;
cur = head;
while(idx2!==idx-1){
idx2++;
cur = cur.next;
}
cur.next = cur.next.next;
return head;
};
方法二:使用栈,将所有节点添加到栈中,然后找到第n+1个离栈的节点,让该节点后面的节点删除。
var removeNthFromEnd = function(head, n) {
let cur = head;
let stack = [];
while(cur){
stack.push(cur);
cur = cur.next;
}
if(stack.length === n)return head.next;
let pop = null;
for(let i=0;i<n+1;i++){
pop = stack.pop();
}
pop.next = pop.next.next;
return head;
};