news 2026/9/3 4:21:44

力扣hot100_链表(3)_python版本

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
力扣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

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/3 1:32:41

基于python的电影推荐系统的设计与实现-附源码201341

基于Python的电影推荐系统设计与实现电影推荐系统通常采用协同过滤或内容过滤算法&#xff0c;结合Python的数据处理库和机器学习框架实现。以下为关键设计步骤和源码框架示例&#xff1a;数据准备与预处理使用pandas加载电影评分数据集&#xff08;如MovieLens&#xff09;&am…

作者头像 李华
网站建设 2026/9/2 21:31:59

2026年--Lc339-二叉树的最近公共祖先(树,递归)--java版

1.题目2.思路 如果当前节点是 null 或者是目标节点之一&#xff08;p 或 q&#xff09;&#xff0c;直接返回当前节点。 递归左右子树&#xff1a; 左子树返回值为 l&#xff0c;右子树返回值为 r。 根据左右子树的返回值判断&#xff1a; 如果左子树返回 null&#xff0c;说明…

作者头像 李华
网站建设 2026/9/2 21:30:51

C语言数据类型

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

作者头像 李华
网站建设 2026/9/2 21:31:55

拼多多春节加班费热议背后,近屿智能给出了另一份高薪答案

春节临近&#xff0c;你是否也正陷入“年后再说”的循环&#xff1f;当大多数人在为年终琐事分心时&#xff0c;有一群人&#xff0c;却在默默积累着“节后爆发”的资本——他们关注的不是加班补贴&#xff0c;而是如何让自己的技能&#xff0c;配得上更高的估值。一、高薪加班…

作者头像 李华