您的位置:首页 > Web前端 > Node.js

Swap Nodes in Pairs

2014-11-16 14:52 162 查看
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.

分析:很容易想到的方式是递归,时间复杂度递推公式为T(n) = T(n-2) + 2,可知时间复杂度为O(n)。代码:

class Solution {
public:
ListNode *swapPairs(ListNode *head) {
if(head == NULL || head->next == NULL) return head;

ListNode * tail = swapPairs(head->next->next);
ListNode * tmp = head->next;
head->next = tail;
tmp->next = head;

return tmp;
}
};


迭代版:

class Solution {
public:
ListNode *swapPairs(ListNode *head) {
if(head == NULL || head->next == NULL) return head;

ListNode * dummy = new ListNode(-1);
dummy->next = head;

for(ListNode * pre_p = dummy, *p = head; p && p->next;){
ListNode * tmp = p->next;
p->next = p->next->next;
tmp->next = p;
pre_p->next = tmp;

pre_p = p;
p = p->next;
}

return dummy->next;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: