力扣hot100_链表(3)_python版本

以下是力扣(LeetCode)Hot 100链表专题的Python实现,涵盖常见题型及解法。内容按题目分类整理,避免步骤词汇,直接提供解题思路和代码示例。


反转链表

经典问题,迭代或递归实现链表的反转。

迭代法

def reverseList(head): prev, curr = None, head while curr: next_temp = curr.next curr.next = prev prev = curr curr = next_temp return prev

递归法

def reverseList(head): if not head or not head.next: return head p = reverseList(head.next) head.next.next = head head.next = None return p

合并两个有序链表

双指针遍历,比较节点值后合并。

def mergeTwoLists(l1, l2): dummy = ListNode(-1) curr = dummy while l1 and l2: if l1.val <= l2.val: curr.next = l1 l1 = l1.next else: curr.next = l2 l2 = l2.next curr = curr.next curr.next = l1 if l1 else l2 return dummy.next

https://www.zhihu.com/zvideo/1994540824894140691/
https://www.zhihu.com/zvideo/1994540825489711113/
https://www.zhihu.com/zvideo/1994540824344678795/
https://www.zhihu.com/zvideo/1994540822813751101/
https://www.zhihu.com/zvideo/1994540822474019451/
https://www.zhihu.com/zvideo/1994540821597423591/
https://www.zhihu.com/zvideo/1994540819441545962/
https://www.zhihu.com/zvideo/1994540807810748692/
https://www.zhihu.com/zvideo/1994540808007872957/
https://www.zhihu.com/zvideo/1994540806548254902/
https://www.zhihu.com/zvideo/1994540806317565460/
https://www.zhihu.com/zvideo/1994540805520634546/
https://www.zhihu.com/zvideo/1994540803159249475/
https://www.zhihu.com/zvideo/1994540802739815780/
https://www.zhihu.com/zvideo/1994540802915972236/
https://www.zhihu.com/zvideo/1994540791222247715/
https://www.zhihu.com/zvideo/1994540790983185579/
https://www.zhihu.com/zvideo/1994540790349844503/
https://www.zhihu.com/zvideo/1994540789573887713/
https://www.zhihu.com/zvideo/1994540789531955706/
https://www.zhihu.com/zvideo/1994540787095065282/
https://www.zhihu.com/zvideo/1994540786340078183/


链表中倒数第k个节点

快慢指针法,快指针先走k步,再同步移动。

def getKthFromEnd(head, k): fast = slow = head for _ in range(k): fast = fast.next while fast: fast = fast.next slow = slow.next return slow

删除链表的倒数第N个节点

结合虚拟头节点和快慢指针,避免边界问题。

def removeNthFromEnd(head, n): dummy = ListNode(0, head) fast = slow = dummy for _ in range(n + 1): fast = fast.next while fast: fast = fast.next slow = slow.next slow.next = slow.next.next return dummy.next

相交链表

双指针遍历两链表,到达末尾时切换头节点,相遇点为交点。

def getIntersectionNode(headA, headB): pA, pB = headA, headB while pA != pB: pA = pA.next if pA else headB pB = pB.next if pB else headA return pA

环形链表

快慢指针判断是否存在环,相遇即有环。

def hasCycle(head): slow = fast = head while fast and fast.next: slow = slow.next fast = fast.next.next if slow == fast: return True return False

环形链表 II

快慢指针相遇后,重置慢指针到头部,同步移动至再次相遇。

def detectCycle(head): slow = fast = head while fast and fast.next: slow = slow.next fast = fast.next.next if slow == fast: slow = head while slow != fast: slow = slow.next fast = fast.next return slow return None

回文链表

反转后半部分链表后与前半部分比较。

def isPalindrome(head): slow = fast = head while fast and fast.next: slow = slow.next fast = fast.next.next prev = None while slow: next_temp = slow.next slow.next = prev prev = slow slow = next_temp left, right = head, prev while right: if left.val != right.val: return False left = left.next right = right.next return True

两数相加

模拟加法运算,注意进位处理。

def addTwoNumbers(l1, l2): dummy = curr = ListNode(0) carry = 0 while l1 or l2 or carry: v1 = l1.val if l1 else 0 v2 = l2.val if l2 else 0 sum_val = v1 + v2 + carry carry = sum_val // 10 curr.next = ListNode(sum_val % 10) curr = curr.next l1 = l1.next if l1 else None l2 = l2.next if l2 else None return dummy.next

LRU缓存

双向链表+哈希表实现O(1)时间复杂度的get和put。

class DLinkedNode: def __init__(self, key=0, value=0): self.key = key self.value = value self.prev = None self.next = None class LRUCache: def __init__(self, capacity): self.cache = {} self.capacity = capacity self.head = DLinkedNode() self.tail = DLinkedNode() self.head.next = self.tail self.tail.prev = self.head def get(self, key): if key not in self.cache: return -1 node = self.cache[key] self._move_to_head(node) return node.value def put(self, key, value): if key in self.cache: node = self.cache[key] node.value = value self._move_to_head(node) else: node = DLinkedNode(key, value) self.cache[key] = node self._add_node(node) if len(self.cache) > self.capacity: removed = self._pop_tail() del self.cache[removed.key] def _add_node(self, node): node.prev = self.head node.next = self.head.next self.head.next.prev = node self.head.next = node def _remove_node(self, node): prev = node.prev next_node = node.next prev.next = next_node next_node.prev = prev def _move_to_head(self, node): self._remove_node(node) self._add_node(node) def _pop_tail(self): node = self.tail.prev self._remove_node(node) return node

以上代码均通过力扣官方测试用例,可直接用于练习或面试准备。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1155829.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DeepSeek生成内容准确性校验:三大核心方法避坑指南

DeepSeek生成内容准确性校验&#xff1a;三大核心方法避坑指南在人工智能技术迅猛发展的今天&#xff0c;大型语言模型&#xff08;LLM&#xff09;如DeepSeek已成为信息获取、内容创作和知识探索的重要工具。其强大的生成能力令人惊叹&#xff0c;能够快速产出文本、代码、报告…

数据分析师专属Prompt设计指南:引导DeepSeek精准生成分析报告的指令框架

数据分析师专属Prompt设计指南&#xff1a;引导DeepSeek精准生成分析报告的指令框架引言在数据驱动的时代&#xff0c;数据分析师是连接数据与业务决策的关键桥梁。然而&#xff0c;面对海量的数据、复杂的模型和紧迫的时间压力&#xff0c;如何高效地生成准确、清晰且具有深度…

【毕业设计】基于深度学习识别混凝土是否有裂缝基于python-CNN深度学习识别混凝土是否有裂缝

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

安装Anaconda+Python(2025超详细)

下载Anaconda安装包访问Anaconda官网&#xff08;https://www.anaconda.com/download&#xff09;&#xff0c;选择对应操作系统的版本&#xff08;Windows/macOS/Linux&#xff09;。推荐下载Python 3.x版本的安装包&#xff0c;确保与最新工具链兼容。运行安装程序双击下载的…

基计算机深度学习毕设实战-基于卷积网络训练识别核桃好坏基于python深度学习卷积网络训练识别核桃好坏

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

Python爬虫(54)Python数据治理全攻略:从爬虫清洗到NLP情感分析的实战演进

Python数据治理全攻略&#xff1a;从爬虫清洗到NLP情感分析数据爬取与采集使用requests或scrapy框架抓取目标网站数据&#xff0c;注意遵守robots.txt协议。动态页面可采用selenium模拟浏览器行为。示例代码&#xff1a;import requests response requests.get(https://exampl…

深度学习毕设选题推荐:基于python-CNN卷积神经网络对墙体有无污渍识别基于机器学习卷积神经网络对墙体有无污渍识别

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

微服务服务发现全解析:Eureka、Nacos 与 ZooKeeper 对比与选型指南

一、核心组件深度解析 1. ZooKeeper 定位:分布式协调服务,是 Google Chubby 的开源实现。 核心模型:基于 ZAB 协议 的 CP 系统。 ✅ 适用场景 分布式锁:经典的分布式锁实现方案。 领导者选举:在多个服务实例中选主节点。 集群管理:确保节点上下线状态一致。 元数据存储…

全网最详尽的 DrissionPage 使用教程:用 Python 轻松玩转动态网页

DrissionPage 简介DrissionPage 是一个基于 Python 的网页自动化工具&#xff0c;结合了浏览器自动化&#xff08;如 Selenium&#xff09;和直接 HTTP 请求&#xff08;如 requests&#xff09;的优势&#xff0c;适用于动态网页爬取、自动化测试等场景。其核心特点是无需依赖…

BOM是什么?如何理解BOM在整个生产管理中发挥的作用?

很多人一听BOM&#xff0c;第一反应是&#xff1a;不就是一张物料清单吗&#xff1f;有什么复杂的&#xff1f;于是把它当成Excel表格来处理&#xff1a;打印出来贴墙上&#xff0c;改了就手写标注&#xff0c;新人来了看不懂&#xff0c;时间一长越堆越乱。但真相是&#xff1…

【开源工具】深度解析:Python+PyQt5打造微信多开神器 - 原理剖析与完整实现

原理剖析微信多开的核心原理是绕过微信客户端的单实例检测机制。微信默认通过互斥体&#xff08;Mutex&#xff09;或进程检测确保同一台电脑只能运行一个客户端实例。通过修改或绕过这些检测机制&#xff0c;可以实现多开功能。PyQt5作为GUI框架&#xff0c;主要作用是创建可视…

C语言数据类型

1、数据类型 1.1字符型 字符英文单词是character&#xff0c;在C语言中 char 表示字符类型。 char字符型------1字节 [signed] char//有符号的 unsigned char//无符号的 1.2整型 整数英文单词integer&#xff0c;在C语言中 int 表示整型。 //短整型------2字节 short [int] …

如何用5S现场管理系统,让每一次检查都落地

在中小企业里&#xff0c;推行5S管理并不只是打扫卫生那么简单。很多企业每天都有巡检记录、打卡、拍照&#xff0c;但当你走进车间、办公区或者仓库&#xff0c;你会发现现场依旧乱象丛生。不是员工不努力&#xff0c;也不是管理者不重视&#xff0c;而是5S管理本身如果缺少系…

从手写代码备份到分布式协作:Git 安装使用全攻略(附常见场景与最佳实践)

Git 安装指南Windows 系统 访问 Git 官方下载页面&#xff08;https://git-scm.com/downloads&#xff09;&#xff0c;选择 Windows 版本安装包。运行安装程序时&#xff0c;默认选项即可满足大多数需求&#xff0c;注意勾选“Git Bash”以获取终端工具。macOS 系统 通过 Home…

布朗大学揭示医疗角色扮演的双刃剑效应

这项由布朗大学领导、联合图宾根大学共同完成的研究发表于2026年1月的arXiv预印本平台&#xff08;论文编号&#xff1a;arXiv:2601.05376v1&#xff09;&#xff0c;为我们揭开了一个令人意外的发现&#xff1a;当我们给AI医生戴上不同的"人格面具"时&#xff0c;它…

深度学习毕设选题推荐:基于python卷积网络训练识别核桃好坏基于python深度学习卷积网络训练识别核桃好坏

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

德国研究突破:免训练人脸质量评估技术诞生

来自德国弗劳恩霍夫研究院和达姆施塔特工业大学的研究团队近期取得了一项重要突破&#xff0c;他们提出了名为ViTNT-FIQA的全新人脸图像质量评估方法。这项发表于2025年的研究成果发表在计算机视觉领域的顶级会议上&#xff0c;论文编号为arXiv:2601.05741v1&#xff0c;为人脸…

【算法题】归并排序

归并排序是基于分治思想的经典排序算法&#xff0c;核心逻辑是“拆分→排序→合并”&#xff1a;将数组递归拆分为子数组&#xff0c;分别排序后再合并为有序数组。它是稳定排序&#xff08;相同元素相对位置不变&#xff09;&#xff0c;时间复杂度稳定为 O(nlog⁡n)O(n\log n…

Python数学可视化——显函数、隐函数及复杂曲线的交互式绘图技术

Python数学可视化技术概述Python提供了多种库用于数学可视化&#xff0c;包括显函数、隐函数及复杂曲线的交互式绘图。常用工具包括Matplotlib、SymPy、Plotly和Mayavi&#xff0c;适用于2D/3D图形、符号计算及动态交互。显函数绘图显函数&#xff08;如$y f(x)$&#xff09;可…

谢菲尔德大学:AI模型如何在陌生环境中保持“人性化“表现

当我们人类从一个熟悉的环境转移到完全陌生的地方时&#xff0c;往往需要重新适应当地的规则和习惯。比如一个在北京生活多年的人突然搬到成都&#xff0c;虽然同样是说中文&#xff0c;但在表达方式、社交礼仪&#xff0c;甚至是点菜习惯上都需要重新学习和调整。有趣的是&…