题目:
Swap Nodes in Pairs
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.
思路:
swap 1&2:
p1->next->next = p2->next;//1
p2->next = p1->next; //2
p1->next = p2; //3
swap end
Initialization:
p1&p2都指向原1节点(即节点3前面的节点)
C++ AC代码:
/**
* 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* root = new ListNode(0);
root->next = head;
ListNode* p1 = root;
ListNode* p2 = root;
while ( 1 ){
if ( p1->next == NULL || p1->next->next == NULL ) break;
p2 = p2->next->next; //step 1:set pointer p2
p1->next->next = p2->next; //step 2:begin swap
p2->next = p1->next;
p1->next = p2;
p2 = p2->next ; //step 3:set pointer p1&&p2
p1 = p2;
}
return root->next;
}
};
运行时间 8ms