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 ListNode* cur = head; ListNode* pre = head; ListNode* next = NULL; if (head == NULL) return head; if (head->next != NULL) { head = head->next; next = head->next; head->next = cur; cur->next = next; pre = cur; cur = next; if (cur) { next = cur->next; } else { next = NULL; } } while (next != NULL) { pre->next = cur->next; cur->next = next->next; next->next = cur; pre = cur; cur = cur->next; if (cur) { next = cur->next; } else { next = NULL; } } return head; } };