🧩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 · 链表