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

力扣HOT100之链表:24. 两两交换链表中的节点


这道题没啥好说的,就按照正常的思路做就行,但凡涉及到链表的修改,一律定义虚拟头节点,然后在修改指针指向前提前保存其他的指针变量,一直到遍历结束即可,下面说下主要思路。

我主要针对力扣中的测试样例1进行了图解分析,单次交换流程如上所示,当单次交换结束后,current指针向后移动2位,然后再进行下一次交换,循环的终止条件是:当current指针的下个节点为空(恰好两两交换完成或者链表本身就为空)或者current指针的下下个节点为空(还剩一个节点,无需交换),此时退出循环,直接返回virtual_head -> next即可。

/**
 * 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) {
        ListNode* virtual_head = new ListNode();  //虚拟头节点
        virtual_head -> next = head;
        ListNode* current = virtual_head;  //current指针用于遍历链表
        ListNode* temp1, * temp2;
        while(current -> next && current -> next -> next){
            temp1 = current -> next;  //保存左边的节点
            temp2 = current -> next -> next;  //保存右边的节点
            current -> next = temp2;   //后面的节点替换到前面
            temp1 -> next = temp2 -> next;  
            current -> next -> next = temp1;  //前面的节点替换到后面
            current = current -> next -> next;
        }
        return virtual_head -> next;
    }
};

相关文章:

  • 1. Git 下载和安装
  • docker compose安装智能体平台N8N
  • 蓝桥杯嵌入式按键长按双击
  • 408 计算机网络 知识点记忆(5)
  • Go 微服务框架 | 中间件
  • C++17模板编程与if constexpr深度解析
  • LLM实现模型并行训练:deepspeed 是什么; transformers` 怎么实现模型并行训练吗?
  • 嵌入式Linux驱动——3 总线设备驱动模型
  • C++23新特性详解:迈向更现代化的C++
  • 微服务之间调用外键“翻译”的方法概述
  • 47常用控件_QWidget的toolTip属性
  • 使用Conda创建环境存在问题
  • 力扣448.找到数组中所有消失的元素
  • 从繁琐到高效,2025年AI PPT工具选秒出PPT
  • Java性能调优2025:从JVM到Kubernetes的全链路优化策略
  • SpringWebFlux WebClient:非阻塞HTTP请求客户端
  • 1.认识C语言
  • Helm核心概念与常见操作介绍
  • 设计模式 --- 原型模式
  • 跨省发布抖音作品,IP属地会随之变化吗?
  • 长治做网站哪家好/软文广告例子
  • 网站建设贵阳/做网站的费用
  • 怎样做网站个人简介/seo小白入门
  • 天津市工程建设项目报建网站/凡科建站官网
  • 怎样做网站呢 优帮云/网站seo最新优化方法
  • 网站建设大作业论文/泉州百度竞价公司