###### tags: `LeetCode` `Linked List` `Medium`
# LeetCode #24 [Swap Nodes in Pairs](https://leetcode.com/problems/swap-nodes-in-pairs/)
### (Medium)
給定一個鏈結串列,兩兩交換其中相鄰的節點,並返回交換後的鏈結串列。
你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。

---
訓練邏輯的題目, 解題方法並沒有什麼用。
大概要做的事情, 以圖中為例, 要讓1指向3(2的下一個), 2指向1, 然後用一個指標prev紀錄1, 並進行下一輪。下一輪中, 將3指向4的下一個(nullptr), 並將4指向3, 再將prev指向4, 所以總共需要2個指標加上一個回傳指標來完成。
當tmp指標為空指標時, 代表為總共奇數個鏈結節點並已經進行到最後一組, 同時最後一組只有一個節點, 此時直接跳出迴圈即可。
---
```
/**
* 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 *prev = nullptr, *ans = nullptr, *tmp = nullptr;
if(!head)return nullptr;
else if(!head->next)return head;
while(head){
tmp = head->next;
if(!tmp)break;
head->next=tmp->next;
tmp->next=head;
if(!prev){
ans = tmp;
prev = head;
}
else {
prev->next = tmp;
prev = head;
}
head = head->next;
}
return ans;
}
};
```