leetcode24. 两两交换链表中的节点(java)

news2024/11/27 20:25:40

两两交换链表中的节点

  • leetcode24. 两两交换链表中的节点
    • 題目描述
  • 迭代法.
    • 解题思路
    • 代码演示
  • 递归法
    • 解题思路
    • 代码演示
  • 二叉树专题

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

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/swap-nodes-in-pairs

題目描述

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)

示例1:
在这里插入图片描述
输入:head = [1,2,3,4]
输出:[2,1,4,3]

示例 2:
输入:head = []
输出:[]

示例 3:
输入:head = [1]
输出:[1]

提示:
链表中节点的数目在范围 [0, 100] 内
0 <= Node.val <= 100

迭代法.

解题思路

因为交换相邻两个节点,只需要每次记录下来相邻的两个节点,和上一个节点就可以了,
举例:
比如图中,1 2 3 4 四个节点,交换3 4节点时,我们还要知道2 节点,保证链表不会断。因此还需要一个辅助的节点,
所以新建一个节点,同理,1,2交换时,也用辅助节点帮忙。

代码演示

/**
 * 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 || head.next == null){
          return head;
      }
      //辅助节点。下一个节点指向头节点
      ListNode temp = new ListNode(0);
      temp.next = head;
      ListNode p = temp;
      //有相邻两个节点时 才交换,因此要保证两个条件同时成立
      while(p.next != null  && p.next.next != null){
      		//拿到需要交换的两个节点
          ListNode n1 = p.next;
          ListNode n2 = p.next.next;
          p.next = n2;
          n1.next = n2.next;
          n2.next = n1;
          //指针来到下次要交换的节点前面一个节点
          p = n1;
      }
      return temp.next;
    }
}    

递归法

解题思路

要想实现递归,就先要想明白一个子过程的节点交换,只要能完成,递归下来就能把整个链表实现交换,
因此代码里,先写好一个重连的过程,再加上递归。

代码演示

/**
* 递归
*/
 public ListNode swapPairs(ListNode head) {
        if(head == null || head.next == null){
            return head;
        }
        //递归每次返回下一个交换后的第一个节点,先把头节点拿到,
        ListNode newHead = head.next;
        //当前节点的下一个节点就是后面的交换后的第一个节点,用next 抓住
        head.next = swapPairs(newHead.next);
        //指针连好
        newHead.next = head;
        return newHead;
     
    }

二叉树专题

leetcode652. 寻找重复的子树

leetcode701. 二叉搜索树中的插入操作

leetcode98. 验证二叉搜索树

leetcode700. 二叉搜索树中的搜索

leetcode95–不同的二叉搜索树 II

leetcode96–不同的二叉搜索树

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

全志V3S嵌入式驱动开发(看门狗驱动)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 大家如果做过工业级别的嵌入式设备&#xff0c;那么对看门狗应该不陌生。很多工业级的设备&#xff0c;其应用环境很多时候是非常糟糕的&#xff0…

抖音seo矩阵系统源码开发及部署配置文档分享

一、开发要求及实现流程 &#xff1a;Scope: video.create 需要申请权限 需要用户授权 该接口用于上传视频文件到文件服务器&#xff0c;获取视频文件video_id&#xff08;该 ID 为加密后的 ID&#xff09;。该接口适用于抖音。 注意&#xff1a; 抖音的OAuth API以https://…

阿里云弹性公网ip(EIP)是什么?eip详细介绍

阿里云eip是什么&#xff1f;阿里云百科分享弹性公网IP详细介绍&#xff0c;阿里云弹性公网EIP是什么意思&#xff1f;EIP是可以独立持有的公网IP地址&#xff0c;EIP可以和阿里云专有网络VPC类型的云服务器ECS、NAT网关、ENI网卡、私网负载均衡SLB等绑定&#xff0c;通过EIP可…

chatgpt赋能python:Python是什么

Python是什么 Python是一门高级编程语言&#xff0c;由Guido van Rossum于1991年发明并开发。它具有简单易学、可读性强、跨平台等特点&#xff0c;在Web开发、数据分析、机器学习等领域广泛应用。 Python的文档 Python的文档非常全面&#xff0c;包括官方文档、第三方文档、…

SimSwap复现指引及代码分析【2023有更新】

SimSwap复现指引及代码分析【2023有更新】 0、前言1、复现指引环境配置指引Inference for image or video face swappingInference参数解析Inference用法示例图像视频 2、结果分析3、代码分析 0、前言 论文讲解在&#xff1a;https://blog.csdn.net/qq_45934285/article/detail…

33、js - 事件循环 微任务 宏任务

1、事件循环♻️&#xff08;EventLoop&#xff09; js是单线程语言&#xff0c;也就是某一刻只能执行一行代码&#xff0c;为了让耗时代码不阻塞其他代码运行&#xff0c;设计了事件循环模型。 事件循环是一个并发模型&#xff0c;负责执行代码、收集异步任务的模型&#xff0…

容器(第四篇)创建镜像-dockerfile

创建镜像有三种方法&#xff0c;分别为基于已有镜像创建、基于本地模板创建以及基于Dockerfile创建。 基于现有镜像创建&#xff1a; ①先使用现有镜像创建容器 docker run ②再进入容器进行内容更新 docker exec ③最后提交成新的镜像 docker commit 或 docker…

Linux远程管理工具(PuTTY和SecureCRT)

通过《Linux远程管理协议》一节可以知道&#xff0c;Linux远程管理服务器多基于 SSH 协议。本节给大家介绍 2 种常见的基于 SSH 协议的远程管理工具&#xff0c;分别是 PuTTY 和 SecureCRT。 在使用远程管理工具之前&#xff0c;应先设置宿主机 Windows 与虚拟机 Linux 能够连…

mysql 联合查询

mysql联合查询 联合查询&#xff1a;union&#xff0c;将多次查询(多条select语句)的结果&#xff0c;在字段数相同的情况下&#xff0c;在记录的层次上进行拼接。 基本语法 联合查询由多条select语句构成&#xff0c;每条select语句获取的字段数相同&#xff0c;但与字段类…

Seata介绍、原理、配置

目录 介绍&#xff1a; 核心组件&#xff1a; 原理&#xff1a; Seata 会有 4 种分布式事务解决方案&#xff0c;分别是 AT 模式、TCC 模式、Saga 模式和 XA 模式 AT模式原理&#xff1a; 一阶段&#xff1a; 二阶段提交&#xff1a; 二阶段回滚&#xff1a; Seata配置…

【轨迹跟踪】基于自适应跟踪(EAT)方法的无人机/移动机器人轨迹跟踪(MatlabSimulink)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

随着信息技术的快速发展,编程已经成为一个越来越重要的技能。那么,我们该如何入门编程呢?

*随着信息技术的快速发展&#xff0c;编程已经成为一个越来越重要的技能。那么&#xff0c;我们该如何入门编程呢&#xff1f; 一、自学编程需要注意什么&#xff1f; 自学编程需要注意以下几点&#xff1a; 设定清晰的学习目标&#xff1a;在开始学习编程前&#xff0c;你需…

chatgpt赋能python:Python在485读电表方面的应用

Python在485读电表方面的应用 介绍 近年来&#xff0c;随着智能电网和智慧城市的不断发展&#xff0c;越来越多的城市和企事业单位开始关注能源消费情况并采取有效管理手段&#xff0c;实现节能减排。而想要实现对能源消费情况的监测和控制&#xff0c;就需要能够对电表进行读…

Docker数据管理和网络通信

Docker 的数据管理 管理 Docker 容器中数据主要有两种方式&#xff1a;数据卷&#xff08;Data Volumes&#xff09;和数据卷容器&#xff08;DataVolumes Containers&#xff09;。 1&#xff0e;数据卷 数据卷是一个供容器使用的特殊目录&#xff0c;位于容器中。可将宿主机…

MQTT协议基本讲解(结合netty)

正文 前提MQTT结构可变报文头&#xff08;Variable Header&#xff09;有效负荷&#xff08;payload&#xff09;固定报文头&#xff08;Fixed Header&#xff09;消息类型&#xff08;Message Type&#xff09;QoS级别标志&#xff08;0&#xff0c;1&#xff0c;2&#xff09…

Spring Cloud OpenFeign源码解析,代理的魅力一展无遗

文章目录 一、OpenFeign简介二、OpenFeign中Bean的动态装载1、EnableFeignClients2、registerFeignClients3、FeignClientFactoryBean.getObject4、loadBalance5、DefaultTarget.target6、ReflectiveFeign.newInstance生成代理&#xff08;1&#xff09;targetToHandlersByName…

C语言字符及字符串讲解

文章目录 前言一、字符介绍和使用二、字符串介绍和使用三、字符串操作函数四、字符串的长度和字符串所占内存空间的大小总结 前言 C 语言中的字符和字符串是常用的数据类型。字符是一个单个的字母、数字、标点符号或者其他可打印的符号&#xff0c;使用单引号 ’ ’ 表示&…

Linux route命令实战:route 命令实战教程,配置静态路由,删除路由表项

前言 大家好&#xff0c;又见面了&#xff0c;我是沐风晓月&#xff0c;本文是专栏【linux基本功-基础命令实战】的第61篇文章。 专栏地址&#xff1a;[linux基本功-基础命令专栏] &#xff0c; 此专栏是沐风晓月对Linux常用命令的汇总&#xff0c;希望能够加深自己的印象&am…

使用大型语言模(LLM)构建系统(四):链式提示

今天我学习了DeepLearning.AI的 Building Systems with LLM 的在线课程&#xff0c;我想和大家一起分享一下该门课程的一些主要内容。 下面是我们访问大型语言模(LLM)的主要代码&#xff1a; import openai#您的openai的api key openai.api_key YOUR-OPENAI-API-KEY def get_…

word如何转化为pdf格式?分享四个方法给大家!

在工作和学习中&#xff0c;经常需要对文档进行转换&#xff0c;其中将Word文档转换为PDF是最常见的格式转换之一。下面介绍几种常用的转换方法&#xff0c;包括使用记灵在线工具。 方法一&#xff1a;使用Word软件直接转换 如果你使用的是电脑上的Word软件&#xff0c;可以直…