Open chencl1986 opened 4 months ago
原题链接:19. 删除链表的倒数第 N 个结点
解题思路:
n + 1
next
n+1
n-1
n
head = [1], n = 1
[]
head
prev
/** * @param {ListNode} head * @param {number} n * @return {ListNode} */ var removeNthFromEnd = function(head, n) { // 创建一个prev节点,next指向head let prev = new ListNode(null, head) // 用快慢两个指针移动 let slow = prev let fast = prev // fast一直移动到链表末尾 while (fast) { // 控制fast和slow之间的距离是n+1 if (n >= 0) { n-- } else { // 当fast和slow的距离达到n+1时,slow才开始移动 slow = slow.next } // fast始终保持移动即可 fast = fast.next } // 当fast移动到链表末尾时,slow.next指向倒数第n个节点 // 将倒数n+1个节点指向倒数n-1个节点,即可删除倒数第n个节点 slow.next = slow.next.next // prev.next始终指向新链表的头结点 return prev.next };
原题链接:19. 删除链表的倒数第 N 个结点
解题思路:
n + 1
。next
指向倒数第n个节点。n+1
个节点指向倒数n-1
个节点,即可删除倒数第n
个节点。head = [1], n = 1
这个用例的输出为[]
。为了保证能将head
删除,需要设置一个prev
节点,它指向原链表的head
,两个指针都从prev
开始移动,即可删除head
。