【路飞】算法与数据结构-删除链表的倒数第 N 个结点

123 阅读1分钟

我正在参与掘金新人创作活动,一起开启写作之路。

算法与数据结构-删除链表的倒数第 N 个结点

LeetCode:地址

题目要求

给你一个链表,删除链表的倒数第 n **个结点,并且返回链表的头结点

示例 1:

remove_ex1.jpg

输入: head = [1,2,3,4,5], n = 2
输出: [1,2,3,5]

示例 2:

输入: head = [1], n = 1
输出: []

示例 3:

输入: head = [1,2], n = 1
输出: [1]

提示:

  • 链表中结点的数目为 sz
  • 1 <= sz <= 30
  • 0 <= Node.val <= 100
  • 1 <= n <= sz
思路

1.遍历一遍链表,把链表的每一个结点存到数组 arr 中 2.倒数第 n 个结点为 arr[arr.length - n] 3.删除结点 arr[arr.length - n - 1].next = arr[arr.length - n].next; 4.特殊情况 (1) 删除的为头结点,则操作为head.next = null; return arr[1]; (2) 链表长度为 1 ,则操作为 return (head = head.next);

代码
var removeNthFromEnd = function (head, n) {
        if (head.next === null && n === 1) return (head = head.next);
        let arr = [];
        let h = head;
        while (h !== null) {
          arr.push(h);
          h = h.next;
        }
        let arrLen = arr.length;
        if (n === arrLen) {
          head.next = null;
          return arr[1];
        }
        arr[arrLen - n - 1].next = arr[arrLen - n].next;
        return head;
      };