🧩Algo 链表

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

难度:🟡 Medium | 标签:链表 | 状态:⬜ LeetCode 链接

思路

dummy + 三指针:prev / a / b。 每次把 a-b 翻转为 b-a,然后 prev 跳到 a(新 pair 的尾)。

代码

class Solution {
public:
    ListNode* swapPairs(ListNode* head) {
        ListNode dummy(0, head), *prev = &dummy;
        while (prev->next && prev->next->next) {
            ListNode *a = prev->next, *b = a->next;
            a->next = b->next;
            b->next = a;
            prev->next = b;
            prev = a;
        }
        return dummy.next;
    }
};

复杂度

  • 时间 O(n),空间 O(1)

易错 / 回顾

  • 三条赋值顺序:先把 a 接 b 后面的、再 b 指 a、最后 prev 指 b
  • 循环条件 prev->next && prev->next->next,保证至少两节点
  • 递归版很短但 O(n) 栈
Related · 链表