用三个指针完成两两节点交换,left和right指向的是需要交换位置的节点,pre是用于连接前面链表和正在交换节点的指针
ListNode* swapPairs(ListNode* head) {
if(head == nullptr || head->next == nullptr){
return head;
}
ListNode* newHead = new ListNode(0, head);
ListNode* l = head;
ListNode* r = l->next;
ListNode* pre = newHead;
while(r != nullptr){
l->next = r->next;
r->next = l;
pre->next = r;
pre = l;
l = pre->next;
if (l == nullptr) {
break;
}
r = l->next;
}
return newHead->next;
}