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

力扣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.cnnetsun.cn/news/596819.html

相关文章:

  • Python爬虫(54)Python数据治理全攻略:从爬虫清洗到NLP情感分析的实战演进
  • 夫妻间忌讳的9句话,烂在肚子也不要说
  • 国内首例 AI 伴侣聊天提供者涉黄获刑,二审将开庭;OpenAI :大模型能力过剩,未来重心将转向系统层与应用层丨日报
  • LLDB:现代化的开源调试器(LLVM Debugger)
  • 【开题答辩全过程】以 基于Web技术的知识付费平台为例,包含答辩的问题和答案
  • [大模型架构] LangGraph AI 工作流编排(15)
  • 【大数据毕设推荐】基于Spark的大学排名数据可视化系统,Python+Hadoop技术栈详解 毕业设计 选题推荐 毕设选题 数据分析 机器学习
  • 结合AI高效完成科研论文写作,这7个网站支持自定义格式与LaTeX模板导出
  • 基于 OpenCV 的模板匹配技术实例
  • 基于微信小程序的博物馆文创系统的设计与实现PHP_nodejs_vue+uniapp
  • 赋能智能制造!交流状态采集模块解锁工业自动化新可能
  • 深度测评8个AI论文软件,助研究生轻松搞定论文写作!
  • [大模型架构] LangGraph AI 工作流编排(13)
  • 基于RAG的企业智能客服项目,已拿70万offer!
  • 深度学习毕设选题推荐:基于python-CNN深度学习卷神经网络识别混凝土是否有裂缝基于python-CNN深度学习识别混凝土是否有裂缝
  • 自学linuxday46
  • 智能终端新体验 Orcaterm
  • PC3000(硬盘修复工具)
  • 3个AI产品的提示设计优化案例:如何用用户动机提升体验?
  • 自然语言驱动的 AD智能脚本助手:基于 DeepSeek Coder 的 AD 二次开发全维度实战指南(1)
  • A.每日一题——1266. 访问所有点的最小时间
  • 表的约束条件
  • 智能论文工具Top8榜单:从自动降重到一键生成,全方位功能对比测评
  • 基于SpringBoot的校园一卡通管理系统(源码+lw+部署文档+讲解等)
  • 救命!挖到宝了!2025 计算机就业全景分析,零基础也能冲的高薪岗 + 精通路径,收藏即通关!
  • 基于SpringBoot的以岗位胜任力为导向的医疗护理培训管理程序的构建及应用(源码+lw+部署文档+讲解等)
  • 基于 YOLOv8 的河道漂浮垃圾智能检测|完整源码数据集+PyQt5界面+完整训练流程+开箱即用!
  • 鸿蒙ArkTS开发实战-从零打造高可用待办事项App【QuickTodo】
  • ssh 远程服务器,permission deny
  • 想要高效改写文本?这十大高质量降重网站均支持免费试用,并运用AI智能技术提升改写效果