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.
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode *swapPairs(ListNode *head) { // Start typing your C/C++ solution below // DO NOT write int main() function if(NULL == head) return head; ListNode *pre,*p,*q; pre = NULL; p = head; q = head->next; int i = 0; while(q){ if(i%2 == 0){ if(pre == NULL){ pre = q; head = q; }else pre->next = q; p->next = q->next; q->next = p; // move to the next; i = 0; q = p->next; i++; }else{ pre = p; p = q; q = q->next; i++; } } return head; } };