给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例:
给定 1->2->3->4, 你应该返回 2->1->4->3.
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
if(!head || !head->next)
return head;
ListNode *hn = head->next;
head->next = swapPairs(head->next->next);
hn->next = head;
return hn;
}
};
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
if(!head || !head->next)
return head;
ListNode *hn = head->next, *hnn = head->next->next;
ListNode *newHead = hn, *prev = NULL;
while(head && hn)
{
if(prev)
prev->next = hn;
hnn = hn->next;
hn->next = head;
head->next = hnn;
prev = head;
head = head->next;
if(head)
hn = head->next;
else
hn = NULL;
}
return newHead;
}
};