题目简介
给你一个链表,删除链表的倒数第 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]
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/remove-nth-node-from-end-of-list
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路
- 声明一个哑节点指向 h e a d head head 来包括删除头结点的情况,避免分情况讨论
- 采用双指针法,先让 f a s t fast fast 超前移动 n n n 次
- 然后让两个指针同时遍历链表,当 f a s t fast fast 指向表尾时,对 s l o w slow slow 操作即可删除倒数第 n n n 个结点
代码
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode pre = new ListNode(-1);
pre.next = head;
ListNode fast = pre;
ListNode slow = pre;
while(n > 0){
fast = fast.next;
n--;
}
while(fast.next != null){
fast = fast.next;
slow = slow.next;
}
slow.next = slow.next.next;
return pre.next;
}
}