题解:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
ListNode *r = head,*t; //声明两个缓存节点
if(r&&r->next){//判断链表长度是否大于1
t = r->next;
r->next = t->next;
t->next = r;//三个节点操作
head = t;//先进行一次交换,确定返回的节点head,在后续的交换不改变返回值
while(r->next && r->next->next){
t = r->next->next;
r->next->next = t->next;
t->next = r->next;
r->next = t;//四个节点操作
r = t->next; //重新赋值r的位置,相当r向后移动两次
}
}
return head;
}
};