每天一道算法题【蓝桥杯】【两两交换链表中的节点】
思路
本质问题可以分成若干个子问题
即把前两个链表交换,并与后面的链表相连
故实现函数功能调用自身递归即可
#define _CRT_SECURE_NO_WARNINGS 1
struct ListNode {
int val;
ListNode *next;
ListNode() : val(0), next(nullptr) {}
ListNode(int x) : val(x), next(nullptr) {}
ListNode(int x, ListNode *next) : val(x), next(next) {}
};
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
if (head == nullptr || head->next == nullptr)return head; //遍历到末尾时返回最后一个节点
auto tmp = swapPairs(head->next->next); //调用自身实现链表交换
auto ret = head->next; //预先储存返回的头节点
head->next->next = head; //实现功能
head->next = tmp;
return ret;
}
};