题目描述
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
样例输入
输入:head = [1,2,3,4,5], n = 2
输出:[1,2,3,5]
输入:head = [1], n = 1
输出:[]
代码参考
var removeNthFromEnd = function(head, n) {
// 删除操作一般都会有边界问题
// 因此我们可以使用虚拟头节点的方式
let dummyNode = new ListNode(-1)
dummyNode.next = head
let p1= dummyNode,p2=dummyNode
for(let i = 0;i<n;i++){
p1=p1.next
}
let parNode = p2
while(p1){
p1=p1.next
parNode=p2
p2=p2.next
}
parNode.next= parNode.next.next
p2.next= null
// console.log(parNode.val)
return dummyNode.next
};
说明
思路可以参考上篇
剑指 Offer 22. 链表中倒数第K个节点
稍有差别的是删除节点时必须找到待删除节点的上一个节点。我们在这里可以设置父亲节点,参考代码中就使用的这种方法,同样的也可以在初始找到第K+1个节点,对应的也就是待删除节点的前一个