给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。

思路

  1. 采用两个指针,a 指针领先 b 指针 n 步,而后进行相同步长的遍历操作
  2. a.next 为 null 时,结束遍历操作,此时移除 b.next 节点即可
  3. 为了避免移除头结点的特殊情况,添加一个 dummyHead 指向链表头部
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var removeNthFromEnd = function (head, n) {
const dummyHead = new ListNode()
dummyHead.next = head
let a = dummyHead
for (let i = 0; i < n; ++i) {
a = a.next
}
let b = dummyHead
while (a.next) {
a = a.next
b = b.next
}
b.next = b.next.next
return dummyHead.next
}