官方的答案,搞懂之后在此作个笔记 . . .
题目:
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
代码如下所示:
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL) {}
};
class Solution {
public:
// pre 1 -> 2 -> 3 -> 4
// 递归求解
/*ListNode* swapPairs(ListNode* head) {
if (head == nullptr || head->next == nullptr) {
return head;
}
ListNode* next = head->next;
head->next = swapPairs(next->next);
next->next = head;
return next;
}*/
// 顺序求解 效率较高
ListNode* swapPairs(ListNode* head) {
ListNode* pre = new ListNode(0);
pre->next = head;
ListNode* tmp = pre;
while (tmp->next != nullptr && tmp->next->next != nullptr) {
ListNode* start = tmp->next;
ListNode* end = start->next;
tmp->next = end;
start->next = end->next;
end->next = start;
tmp = start;
}
return pre->next;
}
};