给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例:
给定 1->2->3->4, 你应该返回 2->1->4->3.
解题思路:
迭代
class Solution {
public:
//迭代的方法
ListNode* swapPairs(ListNode* head) {
//要建立一个额外的节点指向头结点
ListNode* res = new ListNode();
res->next = head;
//再循环中移动的节点
ListNode* cur = res;
//循环终止条件,对应节点数为奇数和偶数
while(head != NULL && head->next != NULL) {
//建立两个节点
ListNode* first = head;
ListNode* second = head->next;
//开始交换
cur->next = second;
first->next = second->next;
second->next = first;
//交换结束,移动至下一个交换点
cur = first;
head = first->next;
}
return res->next;
}
};
递归:
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
if(head == NULL || head->next == NULL) {
return head;
}
ListNode* res = head->next;
//下一次递归的开始点
ListNode* n = res->next;
//交换本层的两个单元
head->next = swapPairs(n);
res->next = head;
return res;
}
};