LeetCode 19:删除链表的倒数第N个节点 Remove Nth Node From End of List
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
Given a linked list, remove the n-th node from the end of list and return its head.
示例:
给定一个链表: 1->2->3->4->5, 和 n = 2.
当删除了倒数第二个节点后,链表变为 1->2->3->5.
说明:
给定的 n 保证是有效的。
Note:
Given n will always be valid.
进阶:
你能尝试使用一趟扫描实现吗?
Follow up:
Could you do this in one pass?
解题思路:
这道题很有意思,虽然很简单,但是很考验一个人的思维。最先想到的方法就是遍历整个链表得到长度,减去 n 得到实际应该删除的节点的位置了。然而由于单链表删除操作的特殊性,得到位置之后仍然需要再遍历一次来删除该节点。
进阶要求是一次遍历完成该题,想想是否有好的方法?
假设链表长度为 L ,定义一个指针先走 n 步,此时该指针还剩下 L-n 个节点即可完成该链表的遍历。而第 L-n 个节点不就是题目要求的的要删除的倒数第 n 个节点吗?这时候只需要再定义一个指针,让它与之前的指针同时遍历,当第一个指针遇到空节点时(null 节点),该指针即指向删除的节点。
值得注意的的是,指向应当删除的节点并无法删除它,应当指向该删除节点的前一个节点。
Java:
class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode curA = head;
        ListNode curB = head;
        for (int i = 0; i < n; i++) curA = curA.next;
        if (curA == null) {//如果走了n步之后该节点指向空节点,则该链表只有一个节点
            head = head.next;
            return head;
        }
        while (curA.next != null) {//当第一个指针的下一个节点为空时,该指针指向最后一个节点,而指针curB 走了L-n-1步,即指向该删除节点的前一个节点
            curA = curA.next;
            curB = curB.next;
        }
        curB.next = curB.next.next;//将本来指向应当删除节点地址指向应当删除节点的下一个节点的地址
        return head;
    }
}
Python3:
class Solution:
    def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
        curA,curB=head,head
        for i in range(n):
            curA=curA.next
        if not curA:
            head=head.next
            return head
        while(curA.next):
            curA=curA.next
            curB=curB.next
        curB.next=curB.next.next
欢迎关注公.众号一起刷题:爱写Bug

LeetCode 19:删除链表的倒数第N个节点 Remove Nth Node From End of List的更多相关文章
- [Swift]LeetCode19. 删除链表的倒数第N个节点 | Remove Nth Node From End of List
		Given a linked list, remove the n-th node from the end of list and return its head. Example: Given l ... 
- Java实现 LeetCode 19删除链表的倒数第N个节点
		19. 删除链表的倒数第N个节点 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当 ... 
- LeetCode 19——删除链表的倒数第N个节点(JAVA)
		给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 ... 
- [LeetCode] 19. 删除链表的倒数第N个节点
		题目链接:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/ 题目描述: 给定一个链表,删除链表的倒数第 n 个节点, ... 
- leetcode 19. 删除链表的倒数第N个节点 JAVA
		题目: 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链 ... 
- LeetCode 19——删除链表的倒数第 N 个节点
		1. 题目 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后 ... 
- [LeetCode] 19. 删除链表的倒数第N个节点 ☆☆☆
		描述 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表 ... 
- LeetCode 19. 删除链表的倒数第N个节点(Remove Nth Node From End Of List)
		题目描述 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后, ... 
- LeetCode 19.删除链表的倒数第N个节点(Python)
		题目: 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点 ... 
随机推荐
- LeetCode 71.简化路径
			LeetCode 71.简化路径 题目描述: 以 Unix 风格给出一个文件的绝对路径,你需要简化它.或者换句话说,将其转换为规范路径.在 Unix 风格的文件系统中,一个点(.)表示当前目录本身:此 ... 
- wpf/winform获取windows10系统颜色和主题色
			Windows10开始微软在系统颜色中添加了深色,对于UWP来说很轻松就能获取到系统当前的颜色和主题色,而对于Win32应用就没有那么直观了. 在wpf中,可以通过SystemParameters.W ... 
- Visual Studio 基础设置
			重置开发环境 菜单栏中选择“工具”/“导入和导出设置”/“重置所有设置” 设置行号 菜单栏中选择“工具”/“选项”/“文本编辑器”/“行号” 全屏显示 菜单栏中选择“视图”/“全屏显示” 为程序设置版 ... 
- 1.java容器基本内容
			目录 java容器概述 1.collection接口 (1)collection接口方法 (2)set接口实现类 (3)list接口实现类 (4)queue接口实现类 2.map接口 java容器概述 ... 
- u盘 安装 centOS 7
			实际上, 对于服务器的安装, 最好是能够远程批量安装(可能有些难度, 不是专业运维) 镜像下载地址: http://59.80.44.49/isoredirect.centos.org/centos/ ... 
- JavaScript获取Django模板中指定键值的数据,使用过滤器
			Django中利用js来操作数据的常规操作一般为点(.)操作符来获取字典或列表的数据,一般如{{data.0}},{{data.arg}} 但有时如果数据是嵌套类型的数据时,直接获取某个值就变得困难了 ... 
- jenkins解决乱码
			1.Jenkins系统设置中修改 点击左侧“系统管理”——右侧选择“系统设置”——“全局属性”,选择第一项:Environment variables,键值对列表,点击增加: 键:LANG 值:zh. ... 
- liteos动态加载(十三)
			1. 概述 1.1 基本概念 动态加载是一种程序加载技术. 静态链接是在链接阶段将程序各模块文件链接成一个完整的可执行文件,运行时作为整体一次性加载进内存.动态加载允许用户将程序各模块编译成独立的文件 ... 
- 渗透测试学习 十三、 SQLmap使用详解
			SQLmap介绍 sqlmap是一个由python语言编写的开源的渗透测试工具,它主要是检测SQL注入漏洞,是一款功能强大的SQL漏洞检测利用工具. 他可以检测的数据库有:access.msSQL.M ... 
- Java 种15种锁的介绍:公平锁,可重入锁,独享锁,互斥锁等等…
			Java 中15种锁的介绍 1,在读很多并发文章中,会提及各种各样的锁,如公平锁,乐观锁,下面是对各种锁的总结归纳: 公平锁/非公平锁 可重入锁/不可重入锁 独享锁/共享锁 互斥锁/读写锁 乐观锁/悲 ... 
