当前位置: 首页 > news >正文

删除链表的倒数第N个结点(LeetCode)

题目

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


示例1:

        输入:head=[1,2,3,4,5]n=2

        输出:[1,2,3,5]

示例2: 

        输入:head=[1]n=1

        输出:[]


示例3:

        输入:head=[1,2]n=1

解题

class ListNode:def __init__(self, val=0, next=None):self.val = valself.next = nextclass Solution:def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:# 虚拟头结点dummy = ListNode(0)dummy.next = head# 删除倒数第 n 个节点,先找到倒数第 n + 1 个节点x = self.findFromEnd(dummy, n + 1)# 删掉倒数第 n 个节点x.next = x.next.nextreturn dummy.next# 返回链表的倒数第 k 个节点@staticmethoddef findFromEnd(head: ListNode, k: int) -> ListNode:p1 = head# p1 先走 k 步for _ in range(k):p1 = p1.nextp2 = head# p1 和 p2 同时走,直到 p1 到达链表末尾while p1:p2 = p2.nextp1 = p1.next# p2 现在指向倒数第 k 个节点return p2def print_linked_list(head: ListNode):"""打印链表中的所有节点值"""current = headwhile current:print(current.val, end=" -> " if current.next else "\n")current = current.nextdef list_to_linked_list(values):"""将列表转换为链表"""if not values:return Nonedummy = ListNode(0)current = dummyfor value in values:current.next = ListNode(value)current = current.nextreturn dummy.nextdef linked_list_to_list(head: ListNode):"""将链表转换为列表"""result = []current = headwhile current:result.append(current.val)current = current.nextreturn result# 测试代码
if __name__ == "__main__":# 测试案例test_cases = [([1, 2, 3, 4, 5], 2, [1, 2, 3, 5]),  # 删除倒数第二个节点([1], 1, []),                        # 删除唯一节点([1, 2], 1, [1]),                    # 删除尾节点([1, 2], 2, [2]),                    # 删除头节点([1, 2, 3], 3, [2, 3]),              # 删除头节点(倒数第三个)]for i, (values, n, expected) in enumerate(test_cases):head = list_to_linked_list(values)solution = Solution()print(f"测试用例 {i + 1}: 原链表:", end="")print_linked_list(head)new_head = solution.removeNthFromEnd(head, n)result = linked_list_to_list(new_head)print(f"删除倒数第 {n} 个节点后:", end="")print_linked_list(new_head)assert result == expected, f"测试失败:期望 {expected}, 但得到 {result}"print("测试通过\n")

测试用例 1: 原链表:1 -> 2 -> 3 -> 4 -> 5
删除倒数第 2 个节点后:1 -> 2 -> 3 -> 5
测试通过

测试用例 2: 原链表:1
删除倒数第 1 个节点后:测试通过

测试用例 3: 原链表:1 -> 2
删除倒数第 1 个节点后:1
测试通过

测试用例 4: 原链表:1 -> 2
删除倒数第 2 个节点后:2
测试通过

测试用例 5: 原链表:1 -> 2 -> 3
删除倒数第 3 个节点后:2 -> 3
测试通过

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • java中的tcp
  • SpringBoot集成GraalVM创建高性能原生镜像
  • 60个常见的 Linux 指令
  • 淘宝的商品信息缓存体系是如何构建的?
  • 基于多种机器学习的豆瓣电影评分预测与多维度可视化【可加系统】
  • 孟德尔随机化、R语言,报错,如何解决?
  • 【达梦数据库】通过线程pid定位会话SQL
  • Python——继承
  • vue2学习 -- 核心语法
  • 2024下半年,前端的技术风口来了
  • 【保姆级讲解下QT6.3】
  • JavaScript 实现通话计时(时分秒 本示例在uniapp中)
  • 2024小卷Spring Boot3.0教程思维导图整理
  • python np.max怎么用
  • 代码随想录算法训练营第41天|LeetCode 121. 买卖股票的最佳时机、122.买卖股票的最佳时机II、123.买卖股票的最佳时机III
  • ----------
  • php的引用
  • 【Leetcode】104. 二叉树的最大深度
  • 【前端学习】-粗谈选择器
  • 4. 路由到控制器 - Laravel从零开始教程
  • C# 免费离线人脸识别 2.0 Demo
  • egg(89)--egg之redis的发布和订阅
  • node入门
  • php ci框架整合银盛支付
  • React-redux的原理以及使用
  • Solarized Scheme
  • SpingCloudBus整合RabbitMQ
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 基于遗传算法的优化问题求解
  • 如何胜任知名企业的商业数据分析师?
  • 小试R空间处理新库sf
  • ionic异常记录
  • ​1:1公有云能力整体输出,腾讯云“七剑”下云端
  • #### golang中【堆】的使用及底层 ####
  • #进阶:轻量级ORM框架Dapper的使用教程与原理详解
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • ${factoryList }后面有空格不影响
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (web自动化测试+python)1
  • (办公)springboot配置aop处理请求.
  • (回溯) LeetCode 40. 组合总和II
  • (面试必看!)锁策略
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (详细文档!)javaswing图书管理系统+mysql数据库
  • (转)jQuery 基础
  • . Flume面试题
  • .net web项目 调用webService
  • .Net 高效开发之不可错过的实用工具
  • .net 连接达梦数据库开发环境部署
  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .NET6 命令行启动及发布单个Exe文件
  • /tmp目录下出现system-private文件夹解决方法
  • [20170713] 无法访问SQL Server