题目:
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 Nodes in Pairs
解法:增加头结点便于操作,循环中每次读入两个节点交换顺序。时间O(n)
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
ListNode* h = new ListNode(0);
h->next = head;
ListNode* p = h;
while (p->next && p->next->next) {
ListNode* p1 = p->next;
ListNode* p2 = p1->next;
ListNode* p3 = p2->next;
p->next = p2;
p2->next = p1;
p1->next = p3;
p = p1;
}
ListNode* tmp = h;
h = h->next;
delete(tmp);
return h;
}
};
Runtime: 3 ms