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

力扣刷题Day 31:删除链表的倒数第N个结点(19)

1.题目描述

2.思路

方法1:两遍遍历,第一遍获取链表长度,第二遍到达指定位置删除指定结点。

方法2:递归,一趟扫描即可实现,但可能是因为我的思路太混乱,代码很繁琐而且空间复杂度也很高。

方法3:跟灵茶山艾府大佬学习的双指针方法。

3.代码(Python3)

方法1:

class Solution:def removeNthFromEnd(self, head: Optional[ListNode], n: int) -> Optional[ListNode]:node = headlist_len = 0while node:list_len += 1node = node.nextnode = headif (list_len - n) == 0:return head.nextelif (list_len - n) != 1:for i in range(list_len - n - 1):node = node.nextnode.next = node.next.nextreturn head

方法2:

class Solution:def removeNthFromEnd(self, head: Optional[ListNode], n: int) -> Optional[ListNode]:def helper(node):# 获取链表长度nonlocal list_lenlist_len += 1if not node.next:return (1, node, False)cur_n, next_node, find_or_not = helper(node.next)if cur_n == n + 1:if not find_or_not:find_or_not = Truereturn (cur_n, next_node, find_or_not)else:if list_len - n == 1:find_or_not = Truereturn (cur_n + 1, node, find_or_not)list_len = 0prior_node, find_or_not = helper(head)[1:]if find_or_not:if list_len - n == 1:prior_node = headprior_node.next = prior_node.next.nextreturn headelse:return head.next

方法3:

class Solution:def removeNthFromEnd(self, head: Optional[ListNode], n: int) -> Optional[ListNode]:left = right =dummy = ListNode(next=head)for _ in range(n):right = right.nextwhile right.next:left, right = left.next, right.nextleft.next = left.next.nextreturn dummy.next

4.执行情况

方法1:

方法2:

方法3:

5.感想

两趟扫描竟然比一趟扫描的性能还要好一些。

http://www.xdnf.cn/news/2222.html

相关文章:

  • Linux之netlink(2)libnl使用介绍(1)
  • 6.2 内容生成与营销:个性化内容创作与营销策略优化
  • WPF大数据展示与分析性能优化方向及代码示例
  • ASP.NET MVC​ 入门指南三
  • 【JavaEE】Spring AOP的注解实现
  • ApplicationRunner的run方法与@PostConstruct注解
  • RPCRT4!NdrConformantStructUnmarshall函数分析
  • 模拟地与数字地单点接地的原理
  • 深度解析APPSCAN漏洞扫描:从入门到实战的全流程指南
  • 如何使用URDF搭建双臂UR移动机器人,并在RViz中可视化
  • c++11 :智能指针
  • QCustomPlot QCPItemText文字框可拖动
  • 关于vant4的showImagePreview在使用时可能出现布局显示不正常、缩放后拖动失效问题的粗暴解决方案
  • Jetbrains和Webstorm中设置自定义指令右键快捷键(自定义外部工具)
  • 检测特权访问活动:一个新的 Kibana 集成
  • [C]基础13.深入理解指针(5)
  • C++学习-入门到精通-【1】C++编程入门,输入/输出和运算符
  • Windows 10 系统关机后立即重启
  • 利用TTP协议 ETag + 路由守卫 实现前端发版后通知用户更新得一个方案
  • 过去 vs 现在:创业门槛的颠覆性变化
  • 系统架构师2025年论文《论软件架构评估2》
  • 什么是CN2专线?全面解析中国电信的高性能网络服务
  • 中国头部云服务商分析
  • SQL问题分析与诊断(8)——分析方法3
  • 【Deepseek学习大模型推理】MOONCAKE: A KVCache-centric Architecture实验部分(下)
  • 前端如何获取样式图里面的标准颜色RGB
  • 11.AOP开发
  • 【C语言】全局变量、静态本地变量
  • 百度文心4.5 Turbo与DeepSeek、豆包、元宝对比:技术路径与市场格局分析​​
  • 华为Pura X的智控键:让折叠机体验更上一层楼的设计