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.
两两交换链表中的相邻节点。
accepted solution:
/**
* 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)
{
ListNode *dummyHead=new ListNode(0);
dummyHead->next=head;
ListNode *previous=dummyHead,*current=previous->next;
while(current!=NULL&¤t->next!=NULL)
{
previous->next=current->next;
current->next=previous->next->next;
previous->next->next=current;
previous=current;
current=current->next;
}
current=dummyHead->next;
delete dummyHead;
return current;
}
};