You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LeetCode 24题两两交换链表节点代码超时问题排查求助

分析LeetCode 24题交换链表节点代码超时的原因及修正方案

问题根源:逻辑错误导致死循环

你的代码触发超时不是因为未优化,而是逻辑错误形成了循环链表,导致while fast永远无法退出:

  • 交换节点时未保存后续节点引用:执行runner.next.next = slow后,fast的next被指向slow,但slow原本的next还是fast,形成fast ↔ slow的环。后续slow = fast.next会让slow停在原地,fast = slow.next又回到原fast,循环永远无法终止。
  • runner指针未正确移动:每次交换完一对节点后,runner需要移动到当前交换后的第二个节点(原slow),才能衔接下一对节点,但你的代码完全没做这个操作,导致后续节点无法正确挂载。
  • 边界条件处理混乱:if not fast.next:的判断逻辑错误,提前return的时机不对,会遗漏链表长度为奇数等场景。

修正后的代码实现

以下是两种O(n)时间复杂度、O(1)空间复杂度的正确实现:

迭代方式(修正你的思路)

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def swapPairs(self, head: Optional[ListNode]) -> Optional[ListNode]:
        dummy = ListNode(0)
        dummy.next = head
        prev = dummy
        
        while prev.next and prev.next.next:
            # 保存要交换的两个节点
            first = prev.next
            second = prev.next.next
            
            # 执行交换,先处理后续节点避免断链
            first.next = second.next
            second.next = first
            prev.next = second
            
            # 移动prev到下一对的前一个节点
            prev = first
        
        return dummy.next

递归方式(更简洁)

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def swapPairs(self, head: Optional[ListNode]) -> Optional[ListNode]:
        # 递归终止条件:无节点或只剩一个节点
        if not head or not head.next:
            return head
        
        # 保存第二个节点,递归处理后续链表
        second = head.next
        head.next = self.swapPairs(second.next)
        # 交换当前两个节点
        second.next = head
        
        # 返回交换后的头节点
        return second

关键要点总结

  • 交换节点前必须先保存后续节点的引用,避免断链或形成环
  • 迭代方式用哑节点处理头节点交换的特殊情况,通过prev指针跟踪每一对节点的前一个节点
  • 递归方式利用递归栈处理后续节点,代码更简洁,常规测试用例下不会出现栈溢出问题

内容的提问来源于stack exchange,提问作者Shahryar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 06:33:29