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

卡住Leetcode 19问题“从列表末尾删除第N个节点”

Leetcode 19问题是一个经典的链表问题,要求从给定的链表中删除倒数第N个节点。下面是一个完善且全面的答案:

链表是一种常见的数据结构,它由一系列节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。链表可以用于解决各种问题,例如存储数据、实现队列和栈等。

删除链表中的倒数第N个节点可以通过双指针的方法来实现。我们可以使用两个指针,一个指针先移动N步,然后两个指针同时向后移动,直到第一个指针到达链表末尾。此时第二个指针指向的节点就是要删除的节点,我们可以通过修改指针的指向来删除该节点。

以下是一个示例代码,用于实现从链表末尾删除第N个节点的功能:

代码语言: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

    for i in range(n + 1):
        first = first.next

    while first is not None:
        first = first.next
        second = second.next

    second.next = second.next.next

    return dummy.next

这段代码中,我们使用了两个指针firstsecond,首先将first指针向后移动N步,然后同时移动两个指针,直到first指针到达链表末尾。最后,我们修改second指针的next指向,删除倒数第N个节点。

这个问题的时间复杂度为O(L),其中L是链表的长度。空间复杂度为O(1)。

在腾讯云中,可以使用云原生架构来部署和管理应用程序。云原生是一种基于容器、微服务和DevOps的应用程序开发和部署方法,它可以提供高可用性、弹性伸缩和快速部署等优势。腾讯云提供了多个与云原生相关的产品,例如腾讯云容器服务(Tencent Kubernetes Engine,TKE)、腾讯云云原生数据库TDSQL等。您可以通过以下链接了解更多关于腾讯云云原生产品的信息:

希望以上答案能够满足您的需求。如果您还有其他问题,请随时提问。

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

相关·内容

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的下一节点就是我们需要删除节点

27010

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

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

12610

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)。

49820

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

> 题目:19. 删除链表中的倒数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

44910

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;

24820

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个数是正数第几个数了。第二次我们移动对应的长度,找到需要删除节点,将它移除即可。

20440

19. 删除链表的倒数N节点

题目描述 给定一链表,删除链表的倒数 n 节点,并且返回链表的头结点。 示例: 给定一链表: 1->2->3->4->5, 和 n = 2....当删除了倒数第二节点后,链表变为 1->2->3->5. 说明: 给定的 n 保证是有效的。 进阶: 你能尝试使用一趟扫描实现吗?...当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的下一节点指向下下个节点...关键点解析 链表这种数据结构的特点和使用 使用双指针 使用一dummyHead简化操作 代码 /* * @lc app=leetcode id=19 lang=javascript

28230

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

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

24610

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

46030

LeetCode删除链表的倒数N结点_19

思路 利用快慢指针,快指针先走n步,慢指针才开始走,快指针走到终点时,慢指针所在的位置就是倒数n节点。 题目 给你一链表,删除链表的倒数 n 结点,并且返回链表的头结点。...示例 1: image.png 输入:head = [1,2,3,4,5], n = 2 输出:[1,2,3,5] 示例 2: 输入:head = [1], n = 1 输出:[] 示例 3: 输入:head...slow.next; } fast = fast.next; i++; } // 因为slow是删除节点的前一...,所以存在特殊情况 // 一、删除节点是第一,slow为空,通过长度来判断这种情况 if (i - 1 == n) { return head.next...删除节点是头结点之前的,直接返回头结点 if (slow == null) { return head; } // 删除节点slow.next

13810

LeetCode 19删除链表的倒数N节点 Remove Nth Node From End of List

给定一链表,删除链表的倒数 n 节点,并且返回链表的头结点。...示例: 给定一链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二节点后,链表变为 1->2->3->5. 说明: 给定的 n 保证是有效的。...假设链表长度为 L ,定义一指针先走 n 步,此时该指针还剩下 L-n 节点即可完成该链表的遍历。而 L-n 节点不就是题目要求的的要删除的倒数 n 节点吗?...值得注意的的是,指向应当删除节点并无法删除它,应当指向该删除节点的前一节点。...= null) {//当第一指针的下一节点为空时,该指针指向最后一节点,而指针curB 走了L-n-1步,即指向该删除节点的前一节点 curA = curA.next;

20530

LeetCode 19删除链表的倒数N节点 Remove Nth Node From End of List

给定一链表,删除链表的倒数 n 节点,并且返回链表的头结点。...示例: 给定一链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二节点后,链表变为 1->2->3->5. 说明: 给定的 n 保证是有效的。...假设链表长度为 L ,定义一指针先走 n 步,此时该指针还剩下 L-n 节点即可完成该链表的遍历。而 L-n 节点不就是题目要求的的要删除的倒数 n 节点吗?...值得注意的的是,指向应当删除节点并无法删除它,应当指向该删除节点的前一节点。...= null) {//当第一指针的下一节点为空时,该指针指向最后一节点,而指针curB 走了L-n-1步,即指向该删除节点的前一节点 curA = curA.next;

26920

每天一道leetcode19-删除链表的倒数N节点

题目 每天一道leetcode19-删除链表的倒数N节点 分类:链表 中文链接: https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list.../ 英文链接 https://leetcode.com/problems/remove-nth-node-from-end-of-list/ 题目详述 给定一链表,删除链表的倒数 n 节点,并且返回链表的头结点...示例: 给定一链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二节点后,链表变为 1->2->3->5. 说明: 给定的 n 保证是有效的。...题目详解 思路 使用两指针,一快指针,一慢指针; 由于是要找倒数K节点,比如K是2,那么就是倒数第二节点; 快指针先走(K-1)步,也就是走1步; 然后快慢指针同时走,当快的指针走到了链表的末尾...,然后把最后一节点删除 26行的意思是倒数k节点,那么快指针需要走k-1步 29-30行就是快指针先走了k-1步; 31-35行就是快慢指针同时走,直到快指针先走到节点末尾,那么slow指针就是要删除节点

50530

LeetCode19. 删除链表的倒数 N 结点

题目:给你一链表,删除链表的倒数 n 结点,并且返回链表的头结点。 题解: 先判断该链表中有多少元素,即链表的长度length。 该链表为不带头节点的链表。...要删除链表的倒数n节点,即从链表第一开始遍历(length - n),就可得到删除节点。...当n==length时,即删除倒数最后一(第一节点,就直接返回head.next; 创建一temp对象,让temp.next = head(否则会出现空指针异常),通过遍历找到要删除节点进行删除...以下是Java代码: class Solution { public ListNode removeNthFromEnd(ListNode head, int n) { int...head.next; } ListNode temp = new ListNode(); temp.next = head; //创建temp对象,让head的前一节点

14310
领券