Given a linked list, swap every two adjacent nodes and return its head.
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 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6 * ListNode(int x) : val(x), next(NULL) {} 7 * }; 8 */ 9 class Solution { 10 public: 11 ListNode* swapPairs(ListNode* head) { 12 13 if(head == NULL || head->next == NULL){ 14 return head; 15 } 16 ListNode* newHead = new ListNode(-1); 17 ListNode* tail = newHead; 18 newHead->next = head; 19 20 while(tail && tail->next && tail->next->next){ 21 ListNode* n = tail->next; 22 ListNode* nn = tail->next->next; 23 24 //tail->next = nn; 25 n->next = nn->next; 26 nn->next = n; 27 tail->next = nn; 28 29 tail = tail->next->next; 30 } 31 32 return newHead->next; 33 } 34 };