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 if(head==NULL || head->next==NULL) return head; 13 14 ListNode dummy(-1); 15 16 ListNode *pre=&dummy; 17 ListNode *cur=head; 18 ListNode *next=cur->next; 19 20 while(cur!=NULL&&next!=NULL) 21 { 22 pre->next=next; 23 cur->next=next->next; 24 next->next=cur; 25 26 pre=pre->next->next; 27 if(cur->next!=NULL) 28 { 29 cur=cur->next; 30 next=cur->next; 31 } 32 else 33 break; 35 } 36 37 return dummy.next; 38 39 } 40 };