2023-08-06力扣每日一题

链接:

24. 两两交换链表中的节点

题意:

交换链表中12、34、56…

解:

从尾部处理,一次移动两个避免交换23\45,处理完返回这一组的头结点方便更新前面的尾结点

实际代码:

#include
using namespace std;
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) {}
};
ListNode* solve(ListNode* head)//递归
{
    if(head==nullptr || head->next==nullptr) return head;
    ListNode* nnext=solve(head->next->next);//一次移动两个节点
    ListNode* next=head->next;
    head->next=nnext; next->next=head;
    return next;
}
ListNode* swapPairs(ListNode* head)
{
    ListNode* ret=head;
    if(head==nullptr||head->next==nullptr) return ret;
    ret=head->next;
    solve(head);
    return ret;
}
int main()
{
    
}

限制:

  • 链表中节点的数目在范围 [0, 100]
  • 0 <= Node.val <= 100

你可能感兴趣的:(力扣每日一题,leetcode,c++,链表)