思路
本质问题可以分成若干个子问题
即把前两个链表交换,并与后面的链表相连
故实现函数功能调用自身递归即可
#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;}
};