看一百遍美女,美女也不一定是你的。但你刷一百遍算法,知识就是你的了~~
谁能九层台,不用累土起。
题目
给你一个链表,删除链表的倒数第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]
提示:
- 链表中结点的数目为
sz1 <= sz <= 300 <= Node.val <= 1001 <= n <= sz
解题思路
- 定义两个指针,快指针比慢指针快
n - 当快指针到达尾结点时,慢指针刚好到达要删除的结点
- 将慢指针的下个节点指向要删除节点的后置节点便可完成删除
解题代码
var removeNthFromEnd = function(head, n) {
let vnode = new ListNode(-1,head)
let slow = vnode
let fast = vnode
while(n--) fast =fast.next
if(!fast) return vnode.next
while(fast.next){
fast=fast.next
slow= slow.next
}
slow.next = slow.next.next
return vnode.next
};
如有任何问题或建议,欢迎留言讨论!