题解
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
输入:head = [1,2,3,4,5], n = 2
输出:[1,2,3,5]
输入:head = [1], n = 1
输出:[]
输入:head = [1,2], n = 1
输出:[1]
ts
function removeNthFromEnd(head: ListNode | null, n: number): ListNode | null {
//给节点加一个前置节点
let cur = new ListNode(0, head);
let res = cur;
let len: number = 0;
//拿到链表长度
while (head) {
head = head.next;
len++;
}
//删除倒数的第n个元素 那么就是删除正数 总数-(n-1) 个元素(除了长度为1时)
let lenN = len - (n - 1);
//如果链表长度小于n 不合理返回null
if (len < n) {
return null;
}
//如果链表长度等于n 那就是删除第一个
if (len == n) {
return res.next.next;
}
for (let i = 1; i < len; i++) {
//如果已经到了要删除的前一个节点 停下 删除 返回 (前面加了一个前置节点 所以正好是要删除的前一个节点)
cur = cur.next;
if (i == lenN - 1) {
console.log(i);
cur.next = cur.next.next;
return res.next;
}
}
}