这道题只打败了39%的人,呜呜呜,大家都是 O(N) 线性时间,怎么别人就那么优秀呢- -
单链表操作,除了有点烦没其他的。
Given a linked list, swap every two adjacent nodes and return its head.
Example:
Given 1->2->3->4, you should return the list as 2->1->4->3.
Note:
- Your algorithm should use only constant extra space.
- You may not modify the values in the list's nodes, only nodes itself may be changed.
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
ListNode * prev, * Next;
ListNode * res, * temp;
prev = head; res = head;
if(prev == NULL)
return res;
if(prev->next){ //set the res,所以单独拎出来
Next = prev -> next;
prev -> next = Next -> next;
Next->next = prev;
res = Next;
}
while(prev->next){
if(prev->next->next != NULL){
temp = prev;
prev = prev->next;
Next = prev -> next;
prev -> next = Next -> next;
Next->next = prev;
temp->next = Next;
}else
break;
}
return res;
}
};