【力扣LeetCode】19 删除链表的倒数第N个节点

python力扣LeetCode算法题库】19-删除链表倒数第N个节点 删除链表倒数第N个节点 给定一个链表删除链表倒数第 n 个节点,并且返回链表的头结点。 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除倒数第二个节点后,链表变为 1->2->3->5. 说明: 给定的 n 保证是有效的。 进阶: 你能尝试使用一趟扫描实现吗? # Definition for singly-lin... 阅读详情

题目描述(难度中)

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

示例:

给定一个链表: 1->2->3->4->5, 和 n = 2.

当删除了倒数第二个节点后,链表变为 1->2->3->5.

说明:

给定的 n 保证是有效的。

进阶:

你能尝试使用一趟扫描实现吗?

链接

https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/

思路

用一前一后两个指针,第一个指针先跑nnode,第二个指针再从头跑,第一个指针跑到结尾时,第二个指针指向的node即为要删除的node
注意:
1、输入的链表没有nnode时,返回NULL
2、要删除的node是第一个node时,返回为head->next,这种情况需要特判
3、需要用一个指针记录指向要删除node的上一个node

代码

代码没有释放p2指向的内存空间,因为使用deletefree都会编译出错,实际操作中是需要释放的。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* removeNthFromEnd(ListNode* head, int n) {
        ListNode* p1 = head;
        ListNode* p2 = head;
        ListNode* p2pre = head;
        // p1 先向前跑n下
		while(n--){
			if(p1){
				p1 = p1->next;
			}
			else{
				return NULL;
			}
		} 
		// 删除的是第一个node时的特判
		if(p1 == NULL){
			return head->next;
		}
		while(p1){
			p1 = p1->next;
			p2pre = p2;
			p2 = p2->next;
		}
		p2pre->next = p2->next;
        return head;
    }
};
沙猫群优化算法(SCSO)详解:从沙漠生存智慧到全局优化引擎 本文详细介绍了沙猫群优化算法(SCSO),这是一种新型元启发式优化算法,灵感来源于沙猫在沙漠环境中的卓越狩猎行为。SCSO通过模拟沙猫的低频探测能力和精确攻击策略,将优化问题转化为搜索和捕获"猎物"的过程。算法核心包括探索阶段(全局搜索)和开发阶段(局部精细搜索),通过灵敏度范围模型和自适应控制参数实现两者的平衡。SCSO具有参数简单、收敛性能好等优点,适用于解决复杂全局优化问题。 阅读详情

相关推荐

YOLO26改进策略【卷积层】| 引入注意力卷积模块RFAConv,关注感受野空间特征 助力YOLO26精度提升

RFAConv:创新空间注意力和标准卷积运算感受野空间特征是针对卷积核设计的,根据卷积核大小动态生成。以3×3卷积核为例,它由非重叠滑动窗口组成,每个窗口代表一个感受野滑块。

Limiiiing的博客 146

力扣删除链表倒数第N个节点

19. 删除链表倒数第N个节点题目描述题解 题目描述 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除倒数第二个节点后,链表变为 1->2->3->5. 题解 使用双指针,一个快,一个慢,考虑删除节点,和节点数为1时即可 ListNode* removeNthFromEnd(ListNode* head, int n) {...

Fighting for 24 432

基于豆瓣TOP250电影的爬虫与数据分析可视化源码+项目说明+ppt.zip

【资源说明】1、该资源包括项目的全部源码,下载可以直接使用!2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。3、本资源作为“参考资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研,自行调试。基于豆瓣TOP250电影的爬虫与数据分析可视化源码+项目说明+ppt.zip

力扣算法】19-删除链表倒数第N个节点

题目 给定一个链表删除链表倒数第 n 个节点,并且返回链表的头结点。 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除倒数第二个节点后,链表变为 1->2->3->5. 说明: 给定的 n 保证是有效的。 进阶: 你能尝试使用一趟扫描实现吗? 题解 摘要 本文适用于初学者。它介绍了以下内容: 链表的遍历和删除其末尾的...

ZeromaXHe的博客 1258

力扣(十九)删除链表倒数第N个节点(快慢指针)

题目描述 引入:链表 public class ListNode { public int val; public ListNode next; public ListNode(int x) { val = x; } } ①ListNode的head为0则为空链表; ②ListNode.next指向下一节点的地址; ③ListNode.val当前节点地址的值; 解题 public class Solution { public ListNode Remo

The world forgets me! 251

力扣(LeetCode 19)删除链表倒数第n个节点 python

题目 给定一个链表删除链表倒数第 n 个节点,并且返回链表的头结点。 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除倒数第二个节点后,链表变为 1->2->3->5. 说明: 给定的 n 保证是有效的。 进阶: 你能尝试使用一趟扫描实现吗? 来源:力扣LeetCode) 链接:https://leetcode-cn....

qq_41318002的博客 301

力扣小白刷题之19删除链表倒数第N个节点

题目描述 给定一个链表删除链表倒数第 n 个节点,并且返回链表的头结点。 思路:双指针(+预先指针) 参考自:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/solution/hua-jie-suan-fa-19-shan-chu-lian-biao-de-dao-shu-d/ 整体思路是让前面的指针先移动 n 步,之后前后指针共同移动直到前面的指针到尾部为止。 首先设立预先指针 pre 设预先指针的下一个结点指向 h

weixin_43525710的博客 302

LeetCode19删除链表倒数第n个节点

一、题目描述     给定一个链表删除链表倒数第 n 个节点,并且返回链表的头结点。     示例:         给定一个链表: 1->2->3->4->5, 和 n = 2.         当删除倒数第二个节点后,链表变为 1->2->3->5.     说明:给定的 n 保证是有效的。 /** * Definition for singly-linked list. * struct ListNode { * int val; *

季风的博客 229

Leetcode19力扣19):删除链表倒数第N个节点

方法一:用哈希表保存链表并统计链表节点总数 class Solution { public: ListNode* removeNthFromEnd(ListNode* head, int n) { unordered_map<int,ListNode*> m; ListNode* cur=head; int count=0; while(cur) { m[count++].

weixin_44537258的博客 150

力扣LeetCode #19 删除链表倒数第N个节点(RemoveNthFromEnd )

- 题目描述 给定一个链表删除链表倒数第 n 个节点,并且返回链表的头结点。 进阶:你能尝试使用一趟扫描实现吗? 来源:LeetCode(https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list) - 示例 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2。 当删除倒数第二个节点后,链表变为 1->2->3->5。 说明:给定的 n 保证是有效的。 - 思路分析 方

weixin_49155948的博客 279

LeetCode 刷题日】19.删除链表倒数第n个节点

本文介绍了使用双指针法解决LeetCode19题"删除链表倒数第N个节点"的算法。通过创建虚拟头节点和设置快慢指针,先让快指针移动n步,再让快慢指针同步移动直到链表末尾,此时慢指针正好指向要删除节点的前驱节点。文章详细解析了算法原理,并配以链表[1,2,3,4,5]删除倒数第2个节点为例,图解了快慢指针的移动过程。最后强调了虚拟头节点的重要性以及边界条件的处理,为链表操作提供了清晰的解题思路。

任岁月风干理想再也找不回真的我 782

Leetcode 19. 删除链表倒数第N个节点

Leetcode 19. 删除链表倒数第N个节点 难度:中等 给定一个链表删除链表倒数第 n 个节点,并且返回链表的头结点。 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除倒数第二个节点后,链表变为 1->2->3->5. 说明: 给定的 n 保证是有效的。 进阶: 你能尝试使用一趟扫描实现吗? 方法题解以及图...

思过留痕 580

LeetCode 19. 删除链表倒数第N个节点 java

LeetCode 19. 删除链表倒数第N个节点 java 给定一个链表删除链表倒数第 n 个节点,并且返回链表的头结点。 示例 : 给定一个链表: 1-&gt;2-&gt;3-&gt;4-&gt;5, 和 n = 2. 当删除倒数第二个节点后,链表变为 1-&gt;2-&gt;3-&gt;5. 说明: 给定的 n 保证是有效的。 JAVA 代码: class Solution { ...

lele的专栏 380

LeetCode19-删除链表倒数第N个节点

LeetCode19-删除链表倒数第N个节点 给定一个链表删除链表倒数第 n 个节点,并且返回链表的头结点。 示例: 给定一个链表: 1-&amp;gt;2-&amp;gt;3-&amp;gt;4-&amp;gt;5, 和 n = 2. 当删除倒数第二个节点后,链表变为 1-&amp;gt;2-&amp;gt;3-&amp;gt;5. 说明: 给定的 n 保证是有效的。 进阶: 你能尝试使用一趟扫描实现吗? .

lyd1995的博客 198

每日算法:删除链表倒数第N个节点

题目描述 给定一个链表删除链表倒数第 n 个节点,并且返回链表的头结点。 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除倒数第二个节点后,链表变为 1->2->3->5. 说明: 给定的 n 保证是有效的。 进阶: 你能尝试使用一趟扫描实现吗? 思路 一次扫描实现的意思是我们要在循环中想办法寻找到倒数第n+1个节点,...

Gongyl的博客 269

删除链表倒数第N个节点 (Java)

给定一个链表删除链表倒数第 n 个节点,并且返回链表的头结点。 示例: 给定一个链表: 1-&gt;2-&gt;3-&gt;4-&gt;5, 和 n = 2. 当删除倒数第二个节点后,链表变为 1-&gt;2-&gt;3-&gt;5. 说明: 给定的 n 保证是有效的。 进阶: 你能尝试使用一趟扫描实现吗?   思路很简单,采用双指针pre 和index,开始时两个都指...

琐忆 710

19. 删除链表倒数第N个节点

19. 删除链表倒数第N个节点 给定一个链表删除链表倒数第 n 个节点,并且返回链表的头结点。 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除倒数第二个节点后,链表变为 1->2->3->5. 说明: 给定的 n 保证是有效的。 进阶: 你能尝试使用一趟扫描实现吗? 分析: 若不要求一...

longtails的博客 357

力扣面试题库之删除链表倒数第N个节点

题目 解题思路: 迭代 想要删除链表中一个节点,就需要先获得该节点的前一个节点,在而想要获得倒数第N个节点,转换一下思维就等价于获得正数的L(链表长度)-N+1个节点,这样就简单了. 首先把头结点赋给两个节点node1,node2,先遍历一边node1算出链表长度,在遍历node2当此时为第L-N时,就代表这是倒数第N个节点的前一个,就让他的next=next.next就行了。 代码 class Solution { public ListNode removeNthFromEnd

weixin_45115928的博客 260

力扣LeetCode】10 正则表达式匹配

题目描述(难度难) 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配。 '.' 匹配任意单个字符 '*' 匹配零个或多个前面的那一个元素 所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。 说明: s 可能为空,且只包含从 a-z 的小写字母。 p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *。 示例 1: 输入: s =...

Jiewang的博客 1279

力扣LeetCode】300 最长上升子序列

题目描述(难度中) 给定一个无序的整数数组,找到其中最长上升子序列的长度。 示例: 输入: [10,9,2,5,3,7,101,18] 输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。 说明: 可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。你算法的时间复杂度应该为 O(n2) 。 进阶: 你能将算法的时间复杂度降低到 O(nlogn) 吗? 链接 h...

Jiewang的博客 1161

力扣LeetCode】124 二叉树中的最大路径和

题目描述(难度难) 路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。 路径和 是路径中各节点值的总和。 给你一个二叉树的根节点 root ,返回其 最大路径和 。 链接 https://leetcode-cn.com/problems/binary-tree-maximum-path-sum/ 代码 /** * Definition for a binary tree node.

Jiewang的博客 517
上一篇: 【力扣LeetCode】17 电话号码的字母组合
下一篇: 【力扣LeetCode】21 合并两个有序链表
jaywangpku
博客等级 码龄13年 79粉丝 185原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值