题目描述
- 题目地址:https://leetcode.cn/problems/remove-nth-node-from-end-of-list/
- 题目要求:
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
解题思路
- 先后指针:
快指针先走n-1步后慢指针再开始从头节点开始走。当快指针走到最后一个结点的 时候,慢指针就走到了倒数第N个结点。
- 定义fast和slow两个指针
解题代码
// 先指针先走n-1步
var removeNthFromEnd = function(head, n) {
let fast = head;
for(let i=1; i<=n-1; i++) {
fast = fast.next;
}
let slow = head;
// 缓存要删除结点的前一个结点
let pre = null;
while(fast.next) {
pre = slow;
fast = fast.next;
slow = slow.next;
}
// 如果要删除的结点是第一个结点的话,则直接返回slow.next
if(pre === null) {
return slow.next;
}
else {
pre.next = slow.next;
}
return head;
}