LeetCode [24] 两两交换链表中的节点

24. 两两交换链表中的节点 - 力扣(LeetCode)

  1. 递归确实np
cpp 复制代码
ListNode* swapPairs(ListNode* head) {
        if(head == nullptr || head->next == nullptr)
            return head;
        ListNode* p1 = head;
        ListNode* p2 = head->next;
        
        p1->next = swapPairs(p2->next);
        p2->next = p1;
        return p2;
    }
  1. 迭代法--难搞
cpp 复制代码
ListNode* swapPairs(ListNode* head) {
        if(head == nullptr || head->next == nullptr)
            return head;
        ListNode* p1 = head;
        ListNode* p2 = p1->next;
        ListNode* p3 = p2->next;
        //p1->next = p3;
        //p2->next = p1;
        ListNode* ret = p2;
        ListNode* tail = p1;
        while(p3 && p3->next)
        {
            tail = p1;
            p1->next = nullptr;
            p2->next = p1;

            p1 = p3;
            p2 = p3->next;
            p3 = p2->next;
            tail->next = p2;
        }
        tail->next = p2;
        p1->next = p3;
        p2->next = p1;
        
        return ret;
    }
相关推荐
RTC老炮39 分钟前
webrtc弱网-AcknowledgedBitrateEstimatorInterface类源码分析与算法原理
网络·算法·webrtc
给大佬递杯卡布奇诺43 分钟前
FFmpeg 基本API avcodec_open2函数内部调用流程分析
c++·ffmpeg·音视频
进击的圆儿1 小时前
高并发内存池项目开发记录 - 02
开发语言·c++·实战·项目·内存池
YXXY3131 小时前
二叉树进阶
c++
Antonio9151 小时前
【图像处理】常见图像插值算法与应用
图像处理·算法·计算机视觉
夜晚中的人海1 小时前
【C++】使用双指针算法习题
开发语言·c++·算法
怀旧,1 小时前
【Linux系统编程】3. Linux基本指令(下)
linux·开发语言·c++
艾莉丝努力练剑1 小时前
【C++STL :stack && queue (三) 】优先级队列的使用以及底层实现
linux·开发语言·数据结构·c++·stl
im_AMBER3 小时前
数据结构 06 线性结构
数据结构·学习·算法
earthzhang20215 小时前
【1028】字符菱形
c语言·开发语言·数据结构·c++·算法·青少年编程