毕节网站网站建设/app推广接单网
给你一个链表,删除链表的倒数第 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 <= 30
0 <= Node.val <= 100
1 <= n <= sz
代码实现:
/*** Definition for singly-linked list.* function ListNode(val, next) {* this.val = (val===undefined ? 0 : val)* this.next = (next===undefined ? null : next)* }*/
/*** @param {ListNode} head* @param {number} n* @return {ListNode}*/
var removeNthFromEnd = function (head, n) {// 创建虚拟头结点alet a = new ListNode(0);a.next = head;// 初始化快慢指针,都指向alet fast = a;let slow = a;// 快指针先移动n步for (let i = 0; i < n; i++) {fast = fast.next;}// 快指针的下一个节点不为空时,快慢指针一起移动// 快指针到末尾时,慢指针指向要删除结点的前一结点while (fast.next !== null) {fast = fast.next;slow = slow.next;}// 删除目标结点,慢指针的next指向下下个结点slow.next = slow.next.next;// 跳过a结点,返回链表头结点return a.next;
};