(写给未来遗忘的自己)
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
// 如果链表为空或者只有一个节点,直接返回head
if (head == nullptr || head->next == nullptr) {
return head;
}
// 初始化两个指针分别指向第一个和第二个节点
ListNode* newHead = head->next; // 新链表头节点
ListNode* prev = nullptr; // 前一个节点,用于链接交换后的节点
ListNode* current = head; // 当前节点
while (current != nullptr && current->next != nullptr) {
ListNode* nextNode = current->next; // 第二个节点
ListNode* nextPair = nextNode->next; // 下一个节点对的第一个节点
// 交换节点
nextNode->next = current;
current->next = nextPair;
// 更新前一个节点的next指针
if (prev != nullptr) {
prev->next = nextNode;
}
// 更新前一个节点和当前节点
prev = current;
current = nextPair;
}
return newHead; // 返回新链表的头节点
}
};
注意:
1.由于链表是一条绳,所以处理两个数据就需要更新前后的两个连接点,就是四个数据的更新(特殊点对于头节点时候只需要更新后面的就可以,头上再没有)
2.结束循环的条件为后面两个节点为空,
3.需要注意的是,交换至少需要两个,所以小于两个的直接返回自己就可以了