初始时1->2->3->4->5->6->7
递归出口:没有结点或只有一个结点
初始时交换1->2的位置,最终2会成为返回的首结点,1用来指向后面的结点。之后递归式的处理后续的结点即可。
/**
* Definition for singly-linked list.
* 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; // 没有结点和只有一个结点时无法交换
// 1->2->3->4,翻转后 2->1->3->4,2成为最终返回的头结点
ListNode *newHead = head->next;
//传入3->4,递归操作
ListNode *nextHead = swapPairs(newHead->next);
//在这里才正式交换1,2的位置
head->next = nextHead;
newHead->next = head;
return newHead;
}
};
时间复杂度:
空间复杂度: