24. 两两交换链表中的节点 - 力扣(LeetCode) (leetcode-cn.com)
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* swapPairs(struct ListNode* head){
// 创建虚拟头结点
// 想要俩俩交换元素需要另一个临时变量来辅助,这也是该虚拟头结点的作用之一
struct ListNode fakehead;
// 让虚拟头结点的指针域指向头结点
fakehead.next = head;
// 让temp指针指向该虚拟头结点
struct ListNode* temp = &fakehead;
// 判断条件是temp指针的后俩位结点存在
while(temp->next && temp->next->next) {
// 创建俩个指针 分别指向要交换的俩个结点,方便后面结点进行交换
struct ListNode* left = temp->next;
struct ListNode* right = temp->next->next;
// 执行交换
temp->next = right;
left->next = right->next;
right->next = left;
// 更新temp的指向
temp = left;
}
return fakehead.next;
}