力扣24 两两交换链表中的节点
题目链接/文章讲解/视频讲解: 代码随想录
思路:使用一个虚拟头节点来简化链表头部的节点交换,同时用一个指针遍历链表,每次检查是否有两个相邻节点可以交换,并调整它们的指针指向顺序,最后返回虚拟头节点的 next
作为新的链表头。
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
// 创建一个虚拟节点并指向头节点
ListNode* dummy = new ListNode(0, head);
// cur指向虚拟节点
ListNode* cur = dummy;
// 当当前节点和它的下一个节点都存在时,进行交换
while(cur->next != nullptr && cur->next->next != nullptr) {
// 节点p1和p2代表两两交换的两个节点
ListNode* p1 = cur->next;
ListNode* p2 = cur->next->next;
// 交换p1和p2
p1->next = p2->next;
p2->next = p1;
cur->next = p2;
// cur移动到下一对节点之前
cur = p1;
}
// 返回新的头节点
return dummy->next;
}
};
(未完待续)