1、题目描述
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
示例 1:
输入:head = [1,2,3,4]
输出:[2,1,4,3]
示例 2:
输入:head = []
输出:[]
示例 3:
输入:head = [1]
输出:[1]
2、思路
递归,每两个节点进行一次反转
class Solution {
public:
//思路,对链表,每 2 个节点进行一次翻转
ListNode* func(ListNode * list){
if(!list || list -> next == nullptr){
return list;
}
//保存当前节点的下一个节点
ListNode * tmp = list -> next;
//递归,当前翻转的两节点的第一个节点的next,指向下一对双节点反转后的头结点
list -> next = func(list -> next -> next);
//下一个节点指向当前节点
tmp -> next = list;
//下一个节点反转后变为当前节点,返回
return tmp;
}
ListNode* swapPairs(ListNode* head) {
return func(head);
}
};
整理不易 你的点赞、关注是对我莫大的鼓励