【代码随想录day4】两两交换链表中的节点

news2024/9/17 7:27:16

题目

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。

你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

示例 1:

 

输入:head = [1,2,3,4]
输出:[2,1,4,3]

示例 2:

输入:head = []
输出:[]

示例 3:

输入:head = [1]
输出:[1]

 思路

这里增加了虚拟头节点,为了就是方便,可以将所有的步骤统一起来,不用单独处理头节点的部分了。

首先需要理解,这里的交换是有顺序的,从左往右每两个交换一次。那就会遇到奇偶的情况了,如果节点数(不带虚拟头节点)为偶数,我们正好可以将每两个节点交换一次;如果为奇数,我们最后肯定还剩一个节点,这个节点不用管,他没法再交换了。

我们定义pre和now分别指向相邻的两个节点,初始pre为虚拟头节点,now为head节点。每次交换分成交换更新指针两步。要注意,我们不仅要将now和now.next进行交换,还要注意将pre的指向也进行相应的修改!

因为head已经改变了,所以最后返回的应该是虚拟头节点的next而不是head!

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

def solve(head):
    if head==None or head.next==None:
        return head
    fake_head = ListNode(head)
    pre = fake_head
    now = head
    while now.next:
        # 1.交换
        tmp = now.next
        now.next = now.next.next
        tmp.next = now
        pre.next = tmp
        # 偶数个节点
        if now.next==None:
            break
        # 2.更新pre和now指针
        now = now.next
        pre = tmp.next
    return fake_head.next

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

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

相关文章

高级搜索算法学习笔记

0.前言 如有错误,欢迎各位大佬指出。 前置芝士: 深度优先搜索 广度优先搜索 1.何为高级搜索? 在通常情况下,普通的深搜往往会超时,即使剪枝也无动于衷。对于广搜,我们一旦超时也很难进行优化。 而这…

jenkins+jmeter参数化并发数和循环次数

最近在整合项目的常规性能测试方案,从Metersphere切换回jenkinsjmeter,命令行执行jmeter命令时考虑参数化循环数和并发数,于是总结了一下两种方法: 1、配置文件传参 把并发数和循环次数作为两个参数,通过使用配置元件…

spring-注解开发bean

注解开发bean 使用Component定义bean 在配置文件中通过组建扫描加载bean 3.也可以通过不要配置文件,定义类,使用Configuration,来代替配置文件 基于注解定义bean 1.component,大部分的bean都可以通过这个来定义 1.1Controller&#xf…

JavaScript 将对象数组按字母顺序排序

原文链接:JavaScript 将对象数组按字母顺序排序 这里给出三种解决方案: 1.if条件语句 sort() 2.localeCompare() sort() 3.Collator() sort() sort 用法 语法 array.sort(compareFunction)参数值 参数描述compareFunction可选。定义替代排序顺序…

01-vue的核心和传统开发的区别

前端行业历史发展 🍕🍕🍕最早的网页是没有数据库的,可以理解为在网络上一张 报纸,直到CGI技术的出现,运行一小段代码与数据库或文件 系统进行交互,如98年的 Google Asp,JSP的出现&#xff0…

vscode编写stm32代码

vscode编辑keil项目,无需复杂步骤 keil开发是挺难用的,vscode又是编辑神器,keil调试vscode编辑代码可以大幅度提高效率,因此可以借用vscode来编辑代码。 1安装c插件 安装c与extension pack插件 2配置c_cpp_properties.json文…

OSI参考模型通信处理例子【图解TCP/IP(笔记四)】

文章目录 OSI参考模型通信处理举例7层通信■ 应用层■ 表示层■ 会话层■ 传输层■ 网络层■ 数据链路层、物理层 OSI参考模型通信处理举例 下面举例说明7层网络模型的功能。假设使用主机(这里所指的主机是指连接到网络上的计算机。按照OSI的惯例,进行通…

C++——this指针

1.什么是this指针? this指针是C中的一个特殊指针,它指向当前对象的地址。在类的成员函数中,this指针可以用来访问当前对象的成员变量和成员函数。this指针的作用是区分同名的成员变量和局部变量,以及在成员函数中访问其他成员函数…

C# PaddleOCR ch_PP-OCRv3 ch_PP-OCRv4测试

效果 未开启Onnx,V3 未开启Onnx,V4 开启Onnx,V3 开启Onnx,V4 项目 VS2022.net 4.8OpenCvSharp4 Sdcb.PaddleInference/2.5.0-preview.1 Sdcb.PaddleOCR/2.6.0.6-preview.1 代码 using OpenCvSharp; using Sdcb.PaddleInference; using Sdcb.PaddleOCR; using Sdcb.Paddle…

Spark—通过Java、Scala API实现WordCount案例的基本操作

实验原理 Spark的核心就是RDD,所有在RDD上的操作会被运行在Cluster上,Driver程序启动很多Workers,Workers在(分布式)文件系统中读取数据后转化为RDD(弹性分布式数据集),然后对RDD在…

Centos7编译安装ffmpeg

1、准备工作,安装必要的环境 yum install autoconf automake bzip2 cmake freetype-devel gcc gcc-c git libtool make mercurial pkgconfig zlib-devel 2、创建目录 ffmpeg_sources 目录是下载软件包的目录 ffmpeg 目录是安装目录 mkdir /usr/local/ffmpeg_sour…

库表实验操作

目录 1、创建数据库Market,在 Market中创建数据表customers。​编辑 2、在Market中创建数据表orders。 3、创建数据库Team,定义数据表player。 1、创建数据库Market,在 Market中创建数据表customers。 (1)mysql>…

CentOS7下安装设置MySQL

CentOS7下安装设置MySQL 1.下载MySQL 1.1下载安装MySQL官方yum源配置 wget http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm 1.2yum下安装MySQL yum -y install mysql57-community-release-el7-11.noarch.rpm 1.3安装MySQL服务器 yum -y install mysq…

一文讲解Linux上部署Web项目(war包)

一文讲解Linux上部署Web项目(war包) 生成war包 ​ 首先,我们要先将Web项目打成war包 ​ 连接Linux服务器 ​ 这里我们通过SSH客户端,连接远程Linux服务器,需要提前知道Linux的IP地址、登录用户名、密码等&#x…

zabbix基础5——screen屏幕展示、主机模板的使用、用户权限设置

文章目录 一、screen1.1 zabbix屏幕展示1.2 screen命令 二、zabbix模板2.1 创建模板2.2 复制模板2.3 模板导出2.4 模板删除2.5 模板导入 三、主机和主机组3.1 添加主机组3.2 导出主机模板3.3 导入主机模板 四、用户和用户组4.1 创建用户组4.2 创建用户4.3 用户权限设置 一、scr…

ETHERNET/IP 转ETHERCAT连接ethercat总线伺服如何控制

远创智控YC-EIP-ECT网关连接到ETHERNET/IP总线中做为从站使用,连接到ETHERCAT总线中做为从站使用,可以同时满足多种工业生产的需求。支持广泛的设备类型,可以和多种不同的设备进行通讯。 技术参数 ETHERNET/IP 技术参数 ● 网关做为 ETHERN…

LeetCode 方法整理(部分更新中)

1、迭代,链表反转 listNode prev null, next, curr head; while (curr ! null) {next curr.next;curr.next prev;curr next;prev curr;curr next; } return prev;2、递归,链表反转 /*// 两个节点时 head.next.next head; head.next…

苹果手机怎么设置日程安排提醒闹钟?简单几步

在忙碌的工作和生活中,我们经常会忘记重要的约会、会议和任务。这时候,一个可靠的日程提醒闹钟就显得尤为重要了。通过在手机上设置日程安排提醒闹钟,让我们不再错过任何重要的事情。 那么苹果手机怎么设置日程安排提醒闹钟? 敬…

硬件电路设计--运算放大器(一)参数和分类

文章目录 前言一、运放分类1.1 功能分类1.2 按单颗IC封装1.3 第一脚的判断 二、运放参数2.1 理想运放2.2 实际运放2.3 数据手册中的重要参数2.3.1 供电电压Vs(power supply)2.3.2 虚短虚断2.3.3 输入偏置电流Ib2.3.4 噪声Vn2.3.5 静态电流IQ2.3.6 输入失…

用户端Web测试方法与技术

目录: WEB 测试概念WEB 测试的价值WEB 测试学习路线WEB 基础知识html讲解javascript讲解css讲解web项目测试流程web测试设计思路web端常见bug解析Litemall购物车功能测试用例设计浏览器开发者工具web兼容测试策略Litemall购物车功能测试执行 1.WEB 测试概念 WEB…