Skip to content
On this page

题解

给你一个链表,删除链表的倒数第 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;
    }
  }
}