题目地址(19. 删除链表的倒数第 N 个结点)
https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/
题目描述
给你一个链表,删除链表的倒数第 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
前置知识
公司
- 暂无
思路

关键点
- 定义快慢指针
- 虚拟头结点
代码
- 语言支持:Java
Java Code:
/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val = val; }* ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/class Solution {public ListNode removeNthFromEnd(ListNode head, int n) {//定义一个虚拟头结点ListNode touNode = new ListNode(-1, head);//定义快慢指针 都指向头结点ListNode fast = touNode;ListNode slow = touNode;//让快指针执行n次while (n-- > 0) {fast = fast.next;}//当快指针.next不等于空时 快慢指针++ 加到最后时 快指针在队伍的最后端 慢指针在待删除的节点的前方while (fast.next != null) {fast = fast.next;slow = slow.next;}//使慢指针的下个节点 指向下个节点的下个节点slow.next = slow.next.next;return touNode.next;}}
复杂度分析
令 n 为数组长度。
- 时间复杂度:
#card=math&code=O%28n%29&id=lF0ht)
- 空间复杂度:
#card=math&code=O%28n%29&id=hKsEe)
