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

leetcode 94.二叉树的中序遍历

思路:我们可以定义三个指针进行操作。

首先分析一下为什么会用三个指针。我们知道,在链表中交换结点,我们需要更改结点的指针地址,在两个相邻结点的交换当中,我们需要知道这两个结点。举个例子:

比如1,2这两个相邻的结点,在自然数中,2的后面肯定是3,用链表形式表示,也就有了1->2->3

我们的目的是要交换1和2的位置,我们首先就需要知道2后面的指向3,这样我们才能把1的指针指向2后面的数,接着就需要用2指向1,这样就完成了一次交换。

但是,如果有多个数呢?比如1,2,3,4,5这个时候我们只对于两个结点的指针地址修改是不够的,当我们交换3,4这两个结点的时候,我们就必须要处理2这个数到底指向谁,所以,为了迭代一致,我们需要用3个指针进行操作。

回到第一个例子里,1->2->3,交换1,2,怎么用三个指针操作呢?很简单,我们只需要在1前面加上一个表头就行了,假设表头的元素值为-1,那么:-1->1->2->3,这样就解决了在头节点位置进行交换结点的问题了,之后汇总一下,就出来结果了。

注意:必须定义指向表头的指针,这样在交换节点之后,我们才能从表头再重新遍历这个链表,否则表头的指向发生了变化就不会指向链表的最前端了。

在代码中,为什么tmp只是向前移动了一次呢?而不是两次呢?因为我们的tmp在经过交换操作之后,已经移动了一次(tmp是两个结点的第一个结点,是前者;交换完之后变成了后者),所以我们只需要移动一次就够了。

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode swapPairs(ListNode head) {
        if(head==null)
        return null;
        ListNode dummy=new ListNode(-1);
        dummy.next=head;
        ListNode tmp=head;
        ListNode tou=dummy;
        while(tmp!=null&&tmp.next!=null){
            ListNode p=tmp.next;
            tou.next=p;
            tmp.next=p.next;
            p.next=tmp;
            tmp=tmp.next;
            tou=tou.next.next;
        }
        return dummy.next;
        
        
        
    }
}


http://www.kler.cn/a/290911.html

相关文章:

  • FFmpeg第二话:FFmpeg 主要结构体剖析
  • linux 中文输入法设置的宏观思路 (****)
  • 前端和后端解决跨域问题的方法
  • 内网IP段介绍与汇总
  • SQL Server 解决游标性能问题的替代方案
  • Qt5HttpServer : Qt官方的HTTP服务器
  • JS中数组的方法flat()怎么用
  • 使用Spring Cloud Consul进行分布式配置的深度解析与实战
  • 使用vscode编辑matlab完美解决方法
  • Python Magic Method 与 Setup 方法:深入解析与应用
  • 【C++】类和对象(三)再探构造函数|static成员函数|友元函数|内部类|匿名对象|对象拷贝时的编译优化
  • 新一代交互模式:LUICUIVUI
  • 基于web旅游信息平台的设计与实现
  • MATLAB实现跳频多频移键控通信系统仿真
  • 记录Jmeter 通过view result tree配置保存响应信息的方法以及命令行运行时的一个坑
  • C++中protobuffer的具体使用方法以及重要原理的实现
  • 尚硅谷前端 ES6 笔记
  • 网恋照妖镜源码搭建教程
  • Java IO异常处理:在Web爬虫开发中的实践
  • element-ui单元格点击后进入编辑模式的功能
  • 【Leetcode 2418 】 按身高排序 —— JS的操作
  • ChatGPT、Claude 和 Gemini 在数据分析方面的合作(第 3 部分):机器学习的最佳 AI 助手
  • 基于Python的机器学习系列(25):使用PyTorch处理数据集
  • 微服务--Nacos配置管理
  • C#使用MQTT(二):MQTT客户端
  • [数据集][目标检测]街头摊贩识别检测数据集VOC+YOLO格式758张1类别