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

从列表末尾删除第N个节点(Leetcode)?- Python

从列表末尾删除第N个节点,可以通过以下步骤实现:

  1. 首先,我们需要遍历列表找到倒数第N个节点的前一个节点。可以使用双指针法来实现,一个指针先移动N步,然后两个指针同时向后移动,直到第一个指针到达列表末尾。
  2. 找到倒数第N个节点的前一个节点后,将其指向倒数第N个节点的下一个节点,即跳过倒数第N个节点。

下面是Python代码实现:

代码语言:txt
复制
class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

def removeNthFromEnd(head, n):
    dummy = ListNode(0)  # 创建一个虚拟头节点
    dummy.next = head
    first = dummy
    second = dummy

    # 先将第一个指针移动n步
    for i in range(n + 1):
        first = first.next

    # 同时移动两个指针,直到第一个指针到达末尾
    while first is not None:
        first = first.next
        second = second.next

    # 删除倒数第N个节点
    second.next = second.next.next

    return dummy.next

这段代码中,我们创建了一个虚拟头节点dummy,它的next指向原始的头节点head。然后使用双指针法找到倒数第N个节点的前一个节点,最后将其指向倒数第N个节点的下一个节点,实现了删除操作。

这个算法的时间复杂度为O(L),其中L是列表的长度。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

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

LeetCode19题,中等难度,很经典的一道链表相关的题目。一多月以前做的,当时一看就知道怎么写,结果代码总是差了点......给定一链表,删除链表的倒数 n 节点,并且返回链表的头结点。...示例: 给定一链表: 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

45930

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

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

# LeetCode-19-删除链表的倒数N节点 给定一链表,删除链表的倒数 n 节点,并且返回链表的头结点。...示例 1: 给定一链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二节点后,链表变为 1->2->3->5. 说明: 给定的 n 保证是有效的。...# 解题思路 方法1、双指针: 两次遍历是一定能找到的,但是这样复杂度比较高,所以直接能想到的是使用双指针来进行操作,一次遍历即可完成 快指针先走n+1步,之后慢指针和快指针一起走 当快指针走到末尾时,...慢指针刚好指向要删除节点的前一节点,改变指向就可以完成节点删除。...其中需要初始化1哑结点作为辅助,该节点位于列表头部,用来简化某些特例,比如列表中只含有一节点,或者需要删除列表的头部。

12510

LeetCode】(No.019)删除链表的倒数N节点

---- NO.19 删除链表的倒数N节点 一、写在前面 刷题模块的初衷是恶补数据结构和算法,不管自己的公众号怎样变化,刷题这个模块一定会保留下去,期待自己能成为offer收割机。...LeetCode 第十八题传输门:【LeetCode】(No.018) 四数之和天给大家分享的是LeetCode 第十九题:删除链表的倒数N节点。...前十题汇总:【LeetCode】打卡记录(NO.1-10)为面试而生,期待你的加入。 二、今日题目 给定一链表,删除链表的倒数 n 节点,并且返回链表的头结点。...三、 分析 这个题目的大意就是删除单链表中的倒数N结点,这个题目还是比较简单的下面是具体的解题思路。...一次遍历链表,用两指针p,q分别指向头结点,然后先将其中一指针p向后移动N个位置,再将p,q同时往后移动,当指针p移动到末尾时,q指针指向的结点即为我们要删除的结点。

36330

Leetcode打卡 | No.19 删除链表的倒数N节点

No.19 删除链表的倒数N节点 题目: 给定一链表,删除链表的倒数 n 节点,并且返回链表的头结点。 示例: 给定一链表: 1->2->3->4->5, 和 n = 2....当删除了倒数第二节点后,链表变为 1->2->3->5. 说明: 给定的 n 保证是有效的。 进阶: 你能尝试使用一趟扫描实现吗?...思路一 :首先利用一次循环得到链表长度 ,之后根据题目输入的参数在指定位置进行删除操作 ,即要删除 L-n+1 节点 ,只需要将 L-n 节点的指针指向 L-n+2 节点即可跳过要删除节点...(在 L-n+2 节点存在的情况下 ,不存在即要删除倒数第一节点 ,是特例情况 。)...思路二:这里考虑用两 ‘指针’ 进行操作 ,要删除倒数 n 节点 ,即与最后一节点的间隔是固定的 (n-1)。

49720

删除链表的倒数N节点 | Leetcode题解

题目描述 给定一链表,删除链表的倒数 n 节点,并且返回链表的头结点。 示例: 给定一链表: 1->2->3->4->5, 和 n = 2....当删除了倒数第二节点后,链表变为 1->2->3->5. 说明: 给定的 n 保证是有效的。 进阶: 你能尝试使用一趟扫描实现吗?...指针 A 先移动 n 次, 指针 B 再开始移动。当 A 到达 null 的时候, 指针 B 的位置正好是倒数 n。这个时候将 B 的指针指向 B 的下下个指针即可完成删除工作。...n 同时移动 p 与 q,直到 q 指向的为 NULL 将 p 的下一节点指向下下个节点 关键点解析 链表这种数据结构的特点和使用 使用双指针 使用一 dummyHead 简化操作 代码 代码支持...链接:19.removeNthNodeFromEndofList 合作方:JavaScript中文网 – 全球极客挚爱的技术成长平台 说明:leetcode 题解 | 每日一题?

32110

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

删除链表中的倒数N节点 > 难度:中等 > 分类:链表 > 解决方案:双指针 今天我们学习19题删除链表中的倒数N节点,这是一道中等题。这个题属于面试中的高频题,一定要能手写出来。...题目描述 给定一链表,删除链表的倒数 n节点,并且返回链表的头结点。...这个题让我们删除链表中的倒数 n节点,并且返回头节点。题目中说明部分提到给定的 n保证是有效的,因此 n的值小于等于链表的长度。...Github地址 LeetCode-19 删除链表中的倒数N节点:https://github.com/JacobLei/leetcode/blob/master/src/main/java/A19..._RemoveNthNodeFromEndofList.java 参考链接 删除链表中的倒数N节点:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list

44610

删除链表的倒数n节点

题目: 思路: 由于这是一链表,所以我们一般只能获取到一头结点,然而其他信息我们不确定。所以可以采用双指针的方法。...思路一,利用一指针获取整个链表元素的总数,利用总数减去目标数,所以我们可以确定要删除的位置。...思路二,利用一指针先走出目标数目,然后两指针一起走,那么先走的指针走完时,第二指针恰好会停在目标元素上。...n; i++) {             p2 = p2.next;         }         //当指针p2走完n步以后,让指针p2和p1同时向前走,直到p2走到最后一节点,即p2->...next=NULL         // 整个过程p2和p1之间相隔n-1节点         while (p2 !

38420

leetcode刷题(4)—— 删除链表的倒数N节点

题目:给定一链表,删除链表的倒数 n 节点,并且返回链表的头结点。 示例: 给定一链表: 1->2->3->4->5, 和 n = 2....当删除了倒数第二节点后,链表变为 1->2->3->5. 说明: 给定的 n 保证是有效的。 进阶: 你能尝试使用一趟扫描实现吗?...第二次遍历找到倒数n-1节点,然后删除它的下一节点即可。...我们可以使用两指针而不是一指针。第一指针列表的开头往下一节点移动 n 步,而第二指针将从列表的开头出发。现在,这两指针被 n 结点分开。...此时第二指针将指向最后一结点数起的 n-1 结点,也就是被删除节点的前一节点,这样直接操作删除即可 public ListNode removeNthFromEnd2(ListNode head

20330

LeetCode 1474. 删除链表 M 节点之后的 N 节点

题目 给定链表 head 和两整数 m 和 n. 遍历该链表并按照如下方式删除节点: 开始时以头节点作为当前节点. 保留以当前节点开始的前 m 节点. 删除接下来的 n 节点....在删除了指定结点之后, 返回修改过后的链表的头节点. 进阶问题: 你能通过就地修改链表的方式解决这个问题吗? 示例 1: ?...输入: head = [1,2,3,4,5,6,7,8,9,10,11,12,13], m = 2, n = 3 输出: [1,2,6,7,11,12] 解析: 保留前(m = 2)结点, 也就是以黑色节点表示的链表头结点开始的结点...删除接下来的(n = 3)结点(3 -> 4 -> 5), 在图中以红色结点表示. 继续相同的操作, 直到链表的末尾. 返回删除结点之后的链表的头结点. 示例 2: ?...m,n <= 1000 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/delete-n-nodes-after-m-nodes-of-a-linked-list

80610

LeetCode 19. 删除链表的倒数N节点(双指针)

题目 给定一链表,删除链表的倒数 n 节点,并且返回链表的头结点。 示例: 给定一链表: 1->2->3->4->5, 和 n = 2....当删除了倒数第二节点后,链表变为 1->2->3->5. 说明: 给定的 n 保证是有效的。 进阶: 你能尝试使用一趟扫描实现吗?...来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list 著作权归领扣网络所有。...解题 设置快慢指针,快指针先走n步,然后慢指针开始走 快指针到达结尾,慢指针即指向要删除节点的前一 注意处理要删除的是head的情况,避免对NULL用 -> class Solution { public...: ListNode* removeNthFromEnd(ListNode* head, int n) { if(n == 0) return head;

24620

LeetCode刷题实战19:删除链表的倒数N节点

今天和大家聊的问题叫做删除链表的倒数N节点 ,我们先来看题面: https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/...题意 给定一链表,要求移除导数n元素,并且返回新链表的head 说明:给定的 n 保证是有效的。 样例 给定一链表: 1->2->3->4->5, 和 n = 2....当删除了倒数第二节点后,链表变为 1->2->3->5. Follow up: Could you do this in one pass? 你能一发通过么???官方嘲讽。...但是上手去做的话会有一点小问题,因为如果是数组很好办,我们直接可以求到数组的长度,导数N元素也非常容易确定。...我们对这个链表遍历两次,第一次求到链表的长度,这样我们就可以推算到倒数N个数是正数第几个数了。第二次我们移动对应的长度,找到需要删除节点,将它移除即可。

20340

【手绘漫画】图解LeetCode删除链表的倒数N节点LeetCode 19题)

图解LeetCode刷题计划" 来了!!! 今天是第十一期,争取每天一期,最多两天一期,欢迎大家监督我。。。 我就是鸽子。。。 开始做链表了,昨天发了单链表的操作,每日一遍,养成习惯!...【手绘漫画】面试必考之手撕单链表(解题模板和深度剖析),(LeetCode 707) 2、题目 首先看一下题目, 可能上来你一看,真简单啊,结果看错题了,因为题中说的是倒数 n ,傻了吧...首先创建一虚拟头结点,和头结点相连,定义两指针。...先让 first 走 n 个位置,然后两指针开始同时运动,这样两指针的间隔固定为 n,只要 first 走到尾结点,那么 second 的下一位置就是要删除节点位置。...删除节点的操作,比较简单,指针改变一下就完事了。 最后返回虚拟节点的下一位置,而不是头结点,因为头结点可能改变,但是虚拟节点一定不变!!!

24510

leetcode刷题】T99-删除链表的倒数N节点

【题目】 给定一链表,删除链表的倒数 n 节点,并且返回链表的头结点。 示例: 给定一链表: ->->->->, 和 n = 2. 当删除了倒数第二节点后,链表变为 ->->->5....说明: 给定的 n 保证是有效的。 进阶: 你能尝试使用一趟扫描实现吗? 【思路】 使用两指针node1和node2,两者相距n节点。...这样,当node2为链表尾部时,删除node1->next即可。注意链表长度等于n这种特殊情况!!...        l1 = head         l2 = head         # 相距n节点         for i in range(n):             l2 = l2.next...            head = head->next;             delete p;             return head;         }         // 同时移动,找到倒数n

37840
领券