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.
加个表头节点,各种清晰。
class Solution {
public:
ListNode *swapPairs(ListNode *head) {
ListNode nodehead(0);
ListNode *pmove = &nodehead;
nodehead.next = head; //if have only one node,won't go into while
ListNode *first = head;
ListNode *second = head?head->next:NULL; //head may be NULL
while(first && second)
{
first->next = second->next;
second->next = first;
pmove->next = second;
pmove = first;
first = first?first->next:NULL;
second = first?first->next:NULL;
}
return nodehead.next;
}
};