从1->3的紫色线是第一步交换,y总画的红线是已经做完第一步交换了
必须严格按照1 2 3 4的顺序 改变指针指向
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
if (!head || !head->next) return head;
auto dummy = new ListNode(-1);
dummy->next = head;
//auto dummy = new ListNode(-1, head); //指建立一个值为-1的指向head的节点
for (auto p = dummy; p->next && p->next->next;) { //若 first 或 second 为空,则终止循环。
auto a = p->next, b = a->next; // 5
p->next = b; //1
a->next = b->next; //2
b->next = a; //3
p = a; //4
}
return dummy->next;
}
};