当前位置: 首页 > news >正文

【C++算法】52.链表_两两交换链表中的节点

文章目录

    • 题目链接:
    • 题目描述:
    • 解法
    • C++ 算法代码:


题目链接:

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


题目描述:

7fc438fb548cfbd03cde4bf15da2675e


解法

解法一:递归

解法二:循环

5b51f410128e89243c85368c6e9fe13e


C++ 算法代码:

/**
 * 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;

        // 创建一个虚拟头节点,简化边界情况处理
        ListNode* newHead = new ListNode(0);
        newHead->next = head;

        // 初始化四个指针用于交换操作
        ListNode* prev = newHead;        // 指向要交换的两个节点的前一个节点
        ListNode* cur = prev->next;      // 指向第一个要交换的节点
        ListNode* next = cur->next;      // 指向第二个要交换的节点
        ListNode* nnext = next->next;    // 指向交换完成后的下一对节点的第一个节点

        // 当有一对节点可以交换时继续循环
        while(cur && next)
        {
            // 交换节点:更改指针指向,实现两两交换
            prev->next = next;         // 前一个节点指向第二个节点
            next->next = cur;          // 第二个节点指向第一个节点
            cur->next = nnext;         // 第一个节点指向下一对节点的第一个节点

            // 更新指针,准备处理下一对节点
            prev = cur;                // 更新prev指向当前已交换的第一个节点
            cur = nnext;               // 更新cur指向下一对的第一个节点
            if(cur) next = cur->next;  // 如果cur存在,更新next
            if(next) nnext = next->next; // 如果next存在,更新nnext
        }

        // 获取结果链表的头节点(跳过虚拟头节点)
        cur = newHead->next;
        delete newHead;                // 释放虚拟头节点的内存
        return cur;                    // 返回新的头节点
    }
};

相关文章:

  • 分布式防护节点秒级切换:实战配置与自动化运维
  • FTP协议和win server2022安装ftp
  • HarmonyOS-ArkUI Ability进阶系列-各类生命周期总结
  • 网络安全应急响应-日志分析
  • 核心机制与主流协议解析
  • vim定位有问题的脚本/插件的一般方法
  • 蓝桥杯基础算法-递归
  • Efficient Burst Raw Denoising:稳定噪声方差和分频率降噪
  • EMA注意力机制
  • 数字游戏(继Day 10)
  • FreeRTOS临界区
  • mybatis是如何进行分页的?分页插件的原理是什么
  • 【学习笔记】HTTP和HTTPS的核心区别及工作原理
  • w283图书商城管理系统
  • Docker全方位指南
  • 嵌入式---加速度计
  • 原子化 CSS 的常见实现框架
  • 微软 SC-900 认证-考核Azure 和 Microsoft 365中的安全、合规和身份管理(SCI)概念
  • 从光波调制到温度补偿:Lilikoi光纤力传感器的核心技术拆解
  • 麦科信光隔离探头在碳化硅(SiC)MOSFET动态测试中的应用
  • 全国人大常委会今年将初次审议检察公益诉讼法
  • 2025财政观察|长三角“三公”经费普降,钱要用在刀刃上
  • 乌总统:若与普京会谈,全面停火和交换战俘是主要议题
  • 陕西河南山西等地将现“干热风”灾害,小麦产区如何防范?
  • 孙卫东会见巴基斯坦驻华大使:支持巴印两国实现全面持久停火
  • 哈佛新论文揭示 Transformer 模型与人脑“同步纠结”全过程!AI也会犹豫、反悔?