19.删除链表的倒数第N个结点
给你一个链表,删除链表的倒数第 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
方法:双指针
思路:新建dummy节点指向head,指针n1、n2指向head,循环n2指针到n的位置,然后再同时移动n1、n2直到结尾,n1、n2的距离是n,此时n1的位置就是需要删除元素的位置

时间复杂度:O(n),n是链表长度
空间复杂度:O(1)
1 /** 2 * Defination for singly-linked list 3 * function ListNode(val,next){ 4 * this.val=(val===undefined?0:val) 5 * this.next=(next===undefined?null:next) 6 * } 7 */ 8 /** 9 * @param {ListNode} head 10 * @param {number} n 11 * @return {ListNode} 12 */ 13 var removeNthFromEnd = function(head, n) { 14 let dummy = new ListNode(); 15 dummy.next = head; 16 let n1 = dummy; 17 let n2 = dummy; 18 for (let i = 0; i <= n; i++) { //n2移动n+1次 19 n2 = n2.next; 20 } 21 while (n2 !== null) { //同时移动n1、n2 22 n1 = n1.next; 23 n2 = n2.next; 24 } 25 n1.next = n1.next.next; //删除元素 26 return dummy.next; 27 }

浙公网安备 33010602011771号