## Thursday, November 20, 2014

### [LeetCode] Swap Nodes in Pairs

For example,
Given `1->2->3->4`, you should return the list as `2->1->4->3`.
Your algorithm should use only constant space. You may not modify the values in the list, only nodes itself can be changed.

1->2->3
2->1->3

1->2->3->4
2->1->4->3

D->1->2->3->4
|
p

D->2->1->3->4
|
r = swapNodes(p->next)

 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22``` ```class Solution { public: ListNode *swapPairs(ListNode *head) { ListNode *dummy = new ListNode(0); dummy->next = head; head = dummy; while(head) head = swapNodes(head->next); head = dummy->next; delete dummy; return head; } ListNode *swapNodes(ListNode *&head) { if(!head || !head->next) return NULL; ListNode *tail = head; ListNode *nextHead = head->next->next; head = head->next; head->next = tail; tail->next = nextHead; return tail; } }; ```

 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18``` ```class Solution { public: ListNode *swapPairs(ListNode *head) { ListNode *dummy = new ListNode(0); dummy->next = head; ListNode *prev = dummy, *cur = head; while(cur && cur->next) { prev->next = cur->next; cur->next = cur->next->next; prev->next->next = cur; prev = cur; cur = cur->next; } return dummy->next; } }; ```