首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

删除链表倒数N个节点

删除链表倒数N个节点 给定一个链表,删除链表倒数 n 个节点,并且返回链表头结点。 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2....当删除了倒数第二个节点,链表变为 1->2->3->5. 说明: 给定 n 保证是有效。 进阶: 你能尝试使用一趟扫描实现吗?...---- 解法一 先遍历一遍计算链表长度;再遍历一遍删除倒数n个节点 ? 解法二:进阶 只遍历一遍链表,能否解决这个问题?...class Solution { public: ListNode* removeNthFromEnd(ListNode* head, int n) { assert(n >=...示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 进阶: 你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?

44431

linux中删除文件最后N小总结

现在,假设我们要从rumenz.txt文件中删除最后三 ( n=3 ) 。...sed命令及其地址范围,我们可以快速删除文件中从给定行号开始到最后一: sed 'GIVEN`LINE`NO, $d' input_file 例如,让我们从5删除直到rumenz.txt结尾...但是,如果我们可以颠倒输入文件中顺序,问题就会变成从文件中删除n 。一个简单 sed 单行sed 1,n d可以删除n。之后,如果我们再次反转线条,我们问题就解决了。...在这个过程中,awk命令将当前行号保存到一个名为total变量中。第一遍,total变量保存了输入文件中总行数 FNR==total-n+1{exit} 1:这是第二遍。...如果FNR==total-n+1,则表示我们已经到达需要删除第一,因此我们退出。否则,我们只打印该行。在这里非零数字1``true 并触发awk默认操作

7.3K10
您找到你想要的搜索结果了吗?
是的
没有找到

删除链表倒数n个节点

所以可以采用双指针方法。 思路一,利用一个指针获取整个链表元素总数,利用总数减去目标数,所以我们可以确定要删除位置。...思路二,利用一个指针先走出目标数目,然后两个指针一起走,那么先走指针走完时,第二个指针恰好会停在目标元素上。...如果是头结点,就将头结点指向下一位         if (p2 == null) {             head = head.next;         } else {             //删除元素...+ 1;         //总数减去倒数n,就是要遍历位置了         for (int i = 1; i < index - 1; i++) {             p2 = p2....如果是头结点,就将头结点指向下一位         if (index == 1) {             head = head.next;         } else {             //删除元素

38520

19 删除链表倒数N个节点

01 题目信息 题目地址: https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/ 给定一个链表,删除链表倒数 n...示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点,链表变为 1->2->3->5. 说明:给定 n 保证是有效。...= node.next.next; return listHead.next; } 时间O(n),创建了栈空间O(n) 04 解法三:一遍历 两个解法都用到了两遍历,那么我们有没有方法可以在一遍历中完成呢...它就是我们处理链表经典方式快慢指针,我们用两个指针,快指针领先n(倒数次数),慢指针在起点,同时迭代。当快指针到了终点,那慢指针岂不是到了倒数n个。...fast起点可以取一格那么slow就能拿到倒数n前一个节点 ?

31330

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

LeetCode19题,中等难度,很经典一道链表相关题目。一个多月以前做,当时一看就知道怎么写,结果代码总是差了点......remove-nth-node-from-end-of-list/ 题目描述: 给定一个链表,删除链表倒数...示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点,链表变为 1->2->3->5. 说明: 给定 n 保证是有效。...即可,根本就没有走...; 如果存在步差,但是n1还是null,也就是步差小于n,那么删除头结点......存在步差,且n1不为null,说明存在倒数n个节点,此时n1是倒数n个节点前一个节点,将n1.next指向倒数n-1个节点即可 中文官网题解: https://leetcode-cn.com/problems

46030

动图:删除链表倒数 N 个结点

删除链表倒数 N 个结点 给你一个链表,删除链表倒数 n 个结点,并且返回链表头结点。 进阶:你能尝试使用一趟扫描实现吗? ? ?...思路一 先遍历一遍链表,获取整个链表长度;假设整个链表长度为 l,则可知要删除节点为 l - n + 1 个节点;再遍历一遍,删除倒数 n 个节点。...思路二 尽管思路一可行,但是需要 遍历链表两遍,不够简洁,而且题目的 进阶 中也提到尝试使用一趟扫描实现,因此本文采用 双指针 策略,实现通过一扫描删除 倒数 n 个节点 。...值为 2 节点是 倒数 4 个节点(往前数),增加两指针 fast/slow,分别指向最后一个元素(NULL)和上图中 target 位置; ?...此时 fast 跟 slow 之间间距是固定(n = 3),找到 target(slow),只需要删除其下一节点即可,但 slow 指向节点前面有多少个节点该如何确定呢?

30810

动图:删除链表倒数 N 个结点

删除链表倒数 N 个结点 给你一个链表,删除链表倒数 n 个结点,并且返回链表头结点。 进阶:你能尝试使用一趟扫描实现吗?...思路一 先遍历一遍链表,获取整个链表长度;假设整个链表长度为 l,则可知要删除节点为 l - n + 1 个节点;再遍历一遍,删除倒数 n 个节点。...思路二 尽管思路一可行,但是需要 遍历链表两遍,不够简洁,而且题目的 进阶 中也提到尝试使用一趟扫描实现,因此本文采用 双指针 策略,实现通过一扫描删除 倒数 n 个节点 。...image.png 按照上面分析,先要找到 倒数 3 个节点前一节点,即值为 2 节点; image.png 增加虚拟头节点 image.png 值为 2 节点是 倒数 4 个节点(往前数...(slow),只需要删除其下一节点即可,但 slow 指向节点前面有多少个节点该如何确定呢?

34970

删除链表倒数N个节点

题目描述 给定一个链表,删除链表倒数 n 个节点,并且返回链表头结点。 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2....当删除了倒数第二个节点,链表变为 1->2->3->5. 说明: 给定 n 保证是有效。 进阶: 你能尝试使用一趟扫描实现吗?...思路 双指针,指针A先移动n, 指针B再开始移动。...当A到达null时候, 指针b位置正好是倒数n 我们可以设想假设设定了双指针p和q的话,当q指向末尾NULL,p与q之间相隔元素个数为n时,那么删除掉p下一个指针就完成了要求。...设置虚拟节点dummyHead指向head 设定双指针p和q,初始都指向虚拟节点dummyHead 移动q,直到p与q之间相隔元素个数为n 同时移动p与q,直到q指向为NULL 将p下一个节点指向下下个节点

28230

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

一、题目介绍 给定一个链表,删除链表倒数 n 个节点,并且返回链表头结点。 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2....当删除了倒数第二个节点,链表变为 1->2->3->5. 说明: 给定 n 保证是有效。...当 fast 遍历到链表末尾时,slow就恰好处于倒数 n 个节点。 具体地,初始时 fast和 slow均指向头节点。我们首先使用 fast 对链表进行遍历,遍历次数为 n。...当fast遍历到链表末尾(即 fast为空指针)时,slow 恰好指向倒数 nn个节点。 如果我们能够得到是倒数 n 个节点前驱节点而不是倒数 n 个节点的话,删除操作会更加方便。...因此我们可以考虑在初始时将slow 指向哑节点,其余操作步骤不变。这样一来,当 fast遍历到链表末尾时,slow下一个节点就是我们需要删除节点。

26910
领券