【LeetCode-中等题】24. 两两交换链表中的节点

文章目录

    • 题目
    • 方法一:递归
    • 方法二:三指针迭代

题目

在这里插入图片描述

方法一:递归

图解:
在这里插入图片描述

				==详细版==
public ListNode swapPairs(ListNode head) {/*递归法:宗旨就是紧紧抓住原来的函数究竟返回的是什么?作用是什么即可其余的细枝末节不要细究,编译器会帮我们自动完成*/// base caseif (head == null || head.next == null) return head;// swapPairs(ListNode head) 的意义就是两两翻转链表中的节点+返回翻转后的新的头结点// 我们知道翻转后新的头结点必然是第二个节点// 举例子:1->2->3->4 翻转后:2->1->4->3ListNode newHead = head.next; // 2// 此时tmpHead为:4->3ListNode tmpHead = swapPairs(newHead.next);// 而前面的还粘连着:1->2->(3)  4->3// 此时再让1->4 此时链表为:2->(3) 1->4->3head.next = tmpHead;// 再将2指向1即可 此时链表为:2->1->4->3 已经完成翻转newHead.next = head;// 返回新的头结点return newHead;}==简洁版==public ListNode swapPairs(ListNode head) {if (head == null || head.next == null) {return head;}ListNode newnode = head.next;head.next = swapPairs(newnode.next);newnode.next = head;return newnode;}

方法二:三指针迭代

思路:

  1. 设置一个哑结点,作为第一次交换的落脚点
  2. 设置落脚点往后两个节点
  3. 执行交换,并且让后面的那个节点指向下一次交换的左节点
  4. 最后更新落脚点,进行下次循环,
  5. 一旦temp.next.next 或者 temp.next 为null,说明落脚点后面的节点不满足两两交换的条件

在这里插入图片描述

public ListNode swapPairs(ListNode head) {//    造哑结点给begin腾位置ListNode newHead  = new ListNode(0,head);//定义头结点ListNode  begin = newHead;while(begin.next != null && begin.next.next != null){ListNode left = begin.next;ListNode right =  begin.next.next;begin.next = right;left.next = right.next;right.next = left;begin = left;}return newHead.next;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/86393.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mongodb两种启动方法

一、命令行启动 1.修改存放数据库的位置 说明:E:\data\mongodb;我在E盘创建的文件夹mongodb mongod --dbpathE:\data\mongodb 2.成功启动 说明:默认端口27017,代表已经启动成功 ,并在mongodb自动创建文件 二、配置项…

十二、pikachu之URL重定向

文章目录 1、URL重定向概述2、实战3、URL跳转的几种方式:3.1 META标签内跳转3.2 javascript跳转3.3 header头跳转 1、URL重定向概述 不安全的url跳转问题可能发生在一切执行了url地址跳转的地方。如果后端采用了前端传进来的(可能是用户传参,或者之前预埋…

百度文库系统PPT docx pdf文档转换系统在线预览知识付费程序源码 二次开发

基于PHPMYSQL开发的适用于多平台的文档管理系统,支持doc、ppt、excel、pdf、压缩包、图片、音视频 等资源的在线预览和下载,响应速度更快速对SEO更友好,收录更快、排名更强,内置文章、问题、广告管理、TAG标签、内部链接等多个运营…

Linux(多进程与多线程)

目录 1、进程与线程概念 1.1 进程 1.2 线程 1.3 进程与线程区别 2、多进程 2.1多进程概念 2.2 进程相关API 2.3 多进程编程 3、多线程 3.1 多线程概念 3.2 多线程相关API 3.3 多线程编程 1、进程与线程概念 1.1 进程 在计算机科学中,进程是正在执行中…

【git进阶使用】 告别只会git clone 学会版本控制 ignore筛选 merge冲突等进阶操作

git使用大全 基本介绍git 快速上手一 环境安装(默认已安装)二 远程仓库克隆到本地1 进入rep文件夹目录2 复制远程仓库地址3 git clone克隆仓库内容到本地4 修改后版本控制4.1 修改文件4.2 git status查看版本库文件状态4.3 git add将文件加入版本库暂存区…

word如何调整页码

文章目录 如何调整页码 如何调整页码 用 word 写报告的时候,经常遇到要求说是要从正文开始才显示页码,那如何实现呢 把鼠标放在我们正文的那一页的顶部,点击 布局 ,再点击分隔符,再点击连续 再点击编译页脚 选择你想要的页脚格式…

netdata监控服务器主机(包括Docker容器)

效果 Docker部署 创建挂载目录 mkdir -p /data/netdata/{netdatacache,netdatalib}docker运行 docker run -d --namenetdata \-p 19999:19999 \-v /data/netdata/netdatalib:/var/lib/netdata \-v /data/netdata/netdatacache:/var/cache/netdata \-v /etc/passwd:/host/etc…

用AI重构的钉钉,“钱”路在何方?

点击关注 文|郝 鑫,编|刘雨琦 钉钉2023年生态大会,离开了两年的无招,遇到了单飞9天的钉钉。 “做小钉钉、做好钉钉、做酷钉钉”,无招重申了钉钉的方向。 无招提到的三点,再加上“高质量增长”…

k3s在线快速安装部署

中文文档:快速入门指南 | K3s 一、k3s父节点安装 设置主机唯一名称 hostnamectl set-hostname 192.168.56.105 开放k3s所需端口 6443 51820 和 51821 在线安装主节点 curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRRORcn…

【openEuler创新项目探索】一个Java端的向量化BLAS库VectorBLAS

VectorBLAS简介 VectorBLAS是一个使用Java语言实现的向量化BLAS高性能库,目前已在openEuler社区开源。 VectorBLAS通过循环展开、矩阵分块和内存布局优化等算法优化,对BLAS函数进行了深度优化,并利用VectorAPI JDK提供的多种向量化API实现。…

Golang Gorm 一对多关系 表结构的建立

Belongs To belongs to 会与另一个模型建立了一对一的连接。 这种模型的每一个实例都“属于”另一个模型的一个实例。 例如,应用包含 user 和 company,并且每个 user 能且只能被分配给一个 company。 下面的类型就表示这种关系。 注意,在 U…

C语言-内存分布(STM32内存分析)

C/C内存分布 一、内存组成二、静态区域文本段 (Text / 只读区域 RO)已初始化读写数据段(RW data -- Initialized Data Segment)未初始化数据段(BSS -- Block Started by Symbol) 三、动态区域堆&#xff08…