leetcode 19. 删除链表的倒数第 N 个结点 js实现
给你一个链表,删除链表的倒数第 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} */ // 使用双指针 // 第一个指针先走 n 步,然后两个指针一起走,当第一个指针到达末尾的时候,第二个指针刚好指向被删除的节点位置 // 为了找到被删除的节点的上一个节点,方便删除,所以定义一个哑结点,作为 second 指针 var removeNthFromEnd = function(head, n) { if(!head){ return head } // 定义哑节点 let dummy = new ListNode(); // 将哑结点下一个指向 head dummy.next = head; // 定义第一个指针 let first = head; // 定义第二个指针指向哑结点 let second = dummy; // 先将第一个指针走 n 步 for(let i=0;i<n;i++){ first = first.next; } // 两个指针同时走,当 first节点不存在,在停止遍历 while(first){ first = first.next; second = second.next; } // 这时的 second 刚好是要删除的节点的上一个节点,改变节点的指向 second.next = second.next.next; // 返回哑结点的下一个节点 return dummy.next; };