我正在参与掘金新人创作活动,一起开启写作之路。
算法与数据结构-删除链表的倒数第 N 个结点
LeetCode:地址
题目要求
给你一个链表,删除链表的倒数第 n **个结点,并且返回链表的头结点
示例 1:
输入: 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 <= 300 <= Node.val <= 1001 <= 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;
};