1. LeetCode题目知识点解析(25、61、82)
最近在刷LeetCode时遇到了几道很有意思的链表题目,分别是25题(K个一组翻转链表)、61题(旋转链表)和82题(删除排序链表中的重复元素II)。这三道题看似简单,但实际写起来发现有不少细节需要注意。今天就把我在解题过程中总结的知识点和踩过的坑分享给大家。
链表操作是算法面试中的常客,这三道题覆盖了链表反转、节点位移和重复处理等典型场景。掌握这些基础操作,对处理更复杂的链表问题会有很大帮助。下面我会逐题分析解题思路和实现细节。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 题目25:K个一组翻转链表
2.1 问题描述与核心思路
给定一个链表,每k个节点一组进行翻转,返回翻转后的链表。如果节点总数不是k的整数倍,最后剩余的节点保持原有顺序。
这道题的核心在于如何高效地分段反转链表。我的思路是:
- 先计算链表长度,确定需要反转的组数
- 对每一组进行标准的链表反转操作
- 处理好组与组之间的连接关系
特别注意:当剩余节点不足k个时,要保持原样不反转
2.2 关键实现细节
python复制def reverseKGroup(head, k):
def reverse(head, tail):
# 标准链表反转实现
prev = tail.next
curr = head
while prev != tail:
next_node = curr.next
curr.next = prev
prev = curr
curr = next_node
return tail, head
dummy = ListNode(0)
dummy.next = head
pre = dummy
while head:
tail = pre
# 检查剩余长度是否足够
for _ in range(k):
tail = tail.next
if not tail:
