1. 题目解析与核心思路
LeetCode 104题"两两交换链表中的节点"是链表操作中的经典问题,主要考察对链表指针操作的掌握程度。题目要求给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。注意不能只是单纯改变节点内部的值,而是需要实际进行节点交换。
这个问题的关键在于理解链表节点的指针操作逻辑。链表不像数组可以通过索引直接访问元素,必须通过指针逐个遍历。在交换相邻节点时,需要特别注意指针的指向关系,否则很容易出现链表断裂或者循环引用的情况。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 基础解法与代码实现
2.1 迭代法实现
最直观的解法是使用迭代方法,通过循环遍历链表并交换相邻节点。这种方法时间复杂度为O(n),空间复杂度为O(1),效率较高。
python复制def swapPairs(head):
# 创建哑节点作为链表头部
dummy = ListNode(0)
dummy.next = head
current = dummy
while current.next and current.next.next:
# 获取要交换的两个节点
first = current.next
second = current.next.next
# 执行交换操作
first.next = second.next
second.next = first
current.next = second
# 移动current指针
current = current.next.next
return dummy.next
这个实现有几个关键点需要注意:
- 使用哑节点(dummy node)简化头节点的处理
- 每次循环处理两个节点,确保它们都存在
- 指针操作顺序很重要,避免链表断裂
2.2 递归法实现
递归解法思路更加简洁,但理解起来可能稍复杂。递归的基本思想是:交换前两个节点,然后递归处理剩下的链表。
python复制def swapPairs(head):
if not head
