参加了 kkb 的门徒培训,想要记录下自己的成长过程。每天一篇,坚持不断更 --- 2022.3.9
题目描述
给你一个链表,删除链表的倒数第 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
解题思路
对于链式结构,我们并不能很直观的找到倒数第n元素,这时候我们可以用前后指针的形式,另前指针为后指针的第n个指针,双指针一同往前走,当前指针为null时,我们便找到了倒数第n个指针
/**
* @param {ListNode} head
* @param {number} n
* @return {ListNode}
*/
var removeNthFromEnd = function (head, n) {
// len > 0 && 1 <= n <= len 可能删除第一个点
// 设置虚拟头节点
let hair = new ListNode(-1, head),
p = hair,
q = head;
// 我们利用前后指针去查找倒数的第n个点
while (n--) {
q = q.next;
}
while (q) {
p = p.next;
q = q.next;
}
// 找到后将其移除
p.next = p.next.next;
return hair.next;
};