题目描述
Given a linked list, swap every two adjacent nodes and return its head.
For example,
Given1->2->3->4, you should return the list as2->1->4->3.
Your algorithm should use only constant space. You may notmodify 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) {
if(head == nullptr || head->next == nullptr)
return head;
ListNode* fake = new ListNode(0);
fake->next = head;
ListNode* p = fake;
while(p->next && p->next->next)
{
p->next = swap(p->next, p->next->next);
p = p->next->next;
}
return fake->next;
}
ListNode* swap(ListNode* head1, ListNode* head2)
{
head1->next = head2->next;
head2->next = head1;
return head2;
}
};