题目名称

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

示例

输入:head = [1,2,3,4,5], n = 2

输出:[1,2,3,5]

题解

首先求出链表的总长度,然后根据传入的第二个参数,找出被删除节点的父节点,将父节点的next 修改为 子节点的next

答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/**
* 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) {
let length = getListLength(head)
let root = head
let num = length - n
if(num === 0) return head.next
while(--num) {
root = root.next
}
root.next && (root.next = root.next.next)
return head
};

function getListLength(root) {
let l = 1
while(root.next) {
l++
root = root.next
}
return l
}