您的位置:首页 > 新闻 > 热点要闻 > 东莞互联网大公司_龙岩网站建设大概费用_西安霸屏推广_如何修改百度上面的门店号码

东莞互联网大公司_龙岩网站建设大概费用_西安霸屏推广_如何修改百度上面的门店号码

2024/12/27 9:00:52 来源:https://blog.csdn.net/qq_14815605/article/details/143107356  浏览:    关键词:东莞互联网大公司_龙岩网站建设大概费用_西安霸屏推广_如何修改百度上面的门店号码
东莞互联网大公司_龙岩网站建设大概费用_西安霸屏推广_如何修改百度上面的门店号码

LeetCode 19. 删除链表的倒数第 N 个结点

题目描述

给你一个链表,删除链表的倒数第 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]

提示:

  • 链表节点数在范围 [1, 10^5]
  • 1 <= Node.val <= 10^5
  • 1 <= n <= 10^5

Java 实现解法

方法一:双指针法
/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode(int x) { val = x; }* }*/
class Solution {public ListNode removeNthFromEnd(ListNode head, int n) {ListNode dummy = new ListNode(0);dummy.next = head;ListNode first = dummy;ListNode second = dummy;// 使first指针移动到倒数第n个节点的位置for (int i = 0; i < n + 1; i++) {first = first.next;}// 移动first指针直到它到达链表末尾while (first != null) {first = first.next;second = second.next;}// 删除倒数第n个节点second.next = second.next.next;return dummy.next;}
}

解题思路

  • 双指针法:使用两个指针 fastslowfast 指针先移动 n 步,然后两个指针一起移动,直到 fast.next 指针到达链表末尾。
    • fast 指针先向前移动 n 步,这样 fastslow 之间的距离就是 n
    • 然后同时移动 fastslow 指针,直到 fast.next 指针到达链表末尾。
    • fast.next 指针到达末尾时,slow 指针就位于倒数第 n 个节点,我们可以将其下一个节点从链表中断开,从而删除倒数第 n 个节点。

这种方法的时间复杂度是 O(L),其中 L 是链表的长度。空间复杂度是 O(1),因为我们只使用了常数个额外的指针。这种方法简单且高效,是解决这类问题的标准方法。

注:来源leetcode网站

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com