LeetCode 19 - 删除链表的倒数第N个节点

embedded/2024/10/20 16:06:45/

题目描述

给你一个链表,删除链表的倒数第 N 个节点,并且返回链表的头结点。

例如:

输入:head = [1,2,3,4,5], n = 2
输出:[1,2,3,5]

解题思路

我们可以使用双指针的方法来解决这个问题。主要思路是使用两个指针fsatslow,先让fsat指针移动n+1步,然后两个指针同时移动,当fast到达链表末尾时,slow正好指向倒数第N+1个节点,这时删除倒数第N个节点即可。

具体步骤如下:

  1. 初始化一个虚拟头节点dummyNode,指向链表的头节点,这样可以处理删除头节点的情况。
  2. 初始化两个指针fastslow,都指向虚拟头节点。
  3. 移动fast指针,先向前移动n+1步。
  4. 同时移动fastslow指针,直到fsat到达链表末尾。
  5. 此时,slow指向倒数第N+1个节点,删除slow的下一个节点。
  6. 返回虚拟头节点的下一个节点作为新的头节点。

算法实现

C++实现

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* removeNthFromEnd(ListNode* head, int n) {ListNode*dummyNode=new ListNode(0);dummyNode->next=head;ListNode*fast=dummyNode;ListNode*slow=dummyNode;while(n--&&fast!=nullptr){fast=fast->next;}while(fast->next!=nullptr){slow=slow->next;fast=fast->next;}ListNode*tmp=slow->next;slow->next=slow->next->next;delete tmp;tmp=nullptr;return dummyNode->next;}
};

复杂度分析

  • 时间复杂度:O(n),其中n是链表的长度。两个指针遍历链表需要两次遍历,一次获取删除节点的位置,另一次执行删除操作。
  • 空间复杂度:O(1),只使用了常数级别的额外空间。

总结

通过本文,我们介绍了一种简单而有效的删除链表倒数第N个节点的方法。使用双指针技巧,我们能够在一次遍历中完成删除操作,并避免了需要使用额外空间的额外临时数组。这种方法不仅时间复杂度低,而且代码简洁,适用于大规模链表的操作。

希望这篇博客能对你有所帮助。如果有任何问题,欢迎随时讨论与交流。


http://www.ppmy.cn/embedded/129031.html

相关文章

Substrate 网络层深度解读:libp2p 助力去中心化点对点高效通信

区块链中需要高效的通信工具来确保节点之间的顺畅交互。而 libp2p 正是开发者在点对点通信中不可或缺的框架,提供了强大的模块化功能,使得去中心化网络中的消息传递变得更加灵活且安全。在 Substrate 中,libp2p 的集成帮助开发者轻松实现各种…

定时发送邮件

1.先连接虚拟机进行挂载 2.编辑dnf配置文件 查看 3.使用dnf安装邮件客户端工具 4.配置文件里写入邮箱信息 [rootlocalhost ~]#vim /etc/s-nail.rc 5.测试邮件服务 6.最后设置定时任务 [rootlocalhost ~]# crontab -e 完成

Nature 正刊丨昼夜节律可塑性通过神经肽基因的调节变化而进化

01摘要 许多生物,包括世界性的果蝇,表现出昼夜节律的可塑性,它们的活动随着黎明-黄昏时间的变化而变化1。这种行为是如何演变的尚不清楚。在这里,我们将黑腹果蝇与经历最小光周期变化的赤道生态专家黑腹果蝇进行比较,以…

多IP访问多网段实验

文章目录 多IP访问多网段实验 多IP访问多网段实验 在当前主机配置多个IP地址,实现多IP访问多网段,记录所有命令及含义 1,环境搭建: [rootlocalhost ~]# mount /dev/sr1 /mnt # 设置ISO虚拟镜像文件文件挂载点,将…

京东背调有病吧......

大家好,我是鸭鸭! 又到周一,新的一周新的摸鱼,今天鸭鸭也在高强度互联网冲浪,没想到刷到这么一条帖子: 一般来说,很多大公司入职流程中都会包含背调,大家也都习惯了会准备好相应的信…

C++头文件大全及解释

在C编程中&#xff0c;头文件起到了非常重要的作用。它们包含了函数声明、类定义和其他预处理指令&#xff0c;为程序提供了所需的各种功能和库。本文将介绍一些常见的C头文件&#xff0c;并提供具体实例来说明它们的用途和解释。 1. <iostream> 这是C标准库中最常用的头…

Android列表组件api

目录 1.ListView控件 1&#xff09;android:divider 2&#xff09;android:dividerHeight 3&#xff09;android:entries 4&#xff09;android:footerDividersEnabled 5&#xff09;android:headerDividersEnabled 6&#xff09;android:listSelector 7&#xff09;android:sc…

CentOS 上安装 MySQL(附卸载教程)

在 CentOS 上安装 MySQL 5.7&#xff1a; 1. 添加 MySQL Yum 存储库 首先&#xff0c;确保你已添加 MySQL Yum 存储库。因为你已经安装了 mysql57-community-release-el7-11.noarch&#xff0c;如果需要重新添加&#xff0c;可以使用以下命令&#xff1a; sudo yum localins…