题目:
Given a linked list, swap every two adjacent nodes and return its head.
For example,
Given1->2->3->4, you should return the list as2->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.
程序:
方法一:
双指针
class Solution {
public:
ListNode *swapPairs(ListNode *head) {
ListNode h(-1);
h.next = head;
ListNode* prev = &h;
ListNode* node = head;
while(node!=NULL && node->next!=NULL) {
ListNode* tmp = node->next;
node->next = tmp->next;
tmp->next = node;
prev->next = tmp;
prev = node;
node = prev->next;
}
return h.next;
}
};
方法二:
递归
class Solution
{
public:
/// 分析一下,使用递归
ListNode *swapPairs(ListNode *head)
{
if(!head || !head->next) /// 空或者仅有一个节点
return head;
ListNode *newHead = head->next;
head->next = swapPairs(newHead->next);
newHead->next = head;
return newHead;
}
};