LeetCode 24. 两两交换链表中的节点(Swap Nodes in Pairs)

24. 两两交换链表中的节点

📘题目描述

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。

示例 1:

输入:head = [1,2,3,4]
输出:[2,1,4,3]

示例 2:

输入:head = []
输出:[]

示例 3:

输入:head = [1]
输出:[1]

💡解题思路:链表指针操作(迭代)

使用一个 dummy节点 简化操作。

每次处理一对节点:

  • 记录第一和第二个节点

  • 调整指针完成交换

  • 移动到下一对节点继续处理


🚩步骤总结

  1. 新建一个虚拟头节点 dummy,指向链表的头部。

  2. 用指针 pre 指向每次要交换的两个节点的前一个节点。

  3. 交换 firstsecond 两个节点。

  4. 更新 prehead 指向下一对节点。

✅Python 代码 

class Solution:
    def swapPairs(self, head: Optional[ListNode]) -> Optional[ListNode]:
        dummy = ListNode(0)  # 创建一个虚拟头节点,便于处理头节点变化
        dummy.next = head
        pre = dummy

        while head and head.next:
            first = head        # 当前要交换的第一个节点
            second = head.next  # 当前要交换的第二个节点

            # 开始交换
            pre.next = second
            first.next = second.next
            second.next = first

            # 移动指针,准备交换下一对
            pre = first
            head = first.next

        return dummy.next

⏱️复杂度分析

项目复杂度说明
时间复杂度O(n)遍历链表一次,每个节点访问一次
空间复杂度O(1)只使用了有限数量的额外指针

其中 n 是链表的节点数。

🧱常见易错点总结

错误点说明
忽略链表节点数是奇数最后一个节点不用交换
指针调整顺序出错交换指针时一定按顺序修改
忘记移动 pre 和 head 指针每次交换后要更新到下一组

🎯总结

  • 使用 dummy节点 是链表修改中常见的技巧,特别适合处理头节点变化的问题。

  • 注意节点指针调整的顺序,保持链表正确连接。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值