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.
// Source : https://oj.leetcode.com/problems/swap-nodes-in-pairs/
// Author : Chao Zeng
// Date : 2014-12-21
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x),next(NULL) {}
};
class Solution
{
public:
ListNode *swapPairs(ListNode *head){
if (!head)
return NULL;
ListNode *phead = head;
int length = 0;
while (phead){
phead = phead->next;
length++;
}
if (length == 1)
return head;
ListNode *first = head;
ListNode *second = head->next;
while (first && second){
int elem = first->val;
first->val = second->val;
second->val = elem;
first = second->next;
if (first != NULL)
second = first->next;
else
break;
}
return head;
}
};