1. 题目
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例:
给定 1->2->3->4, 你应该返回 2->1->4->3.
2. 解题
2.1 递归
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;}
};
2.2 循环
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;elsehn = NULL;}return newHead;}
};