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.
分析:很容易想到的方式是递归,时间复杂度递推公式为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; } };