算法通关村第二关——反转链表白银笔记

文章目录

    • 1.链表指定区间翻转
    • 2.两两交换链表中的节点


1.链表指定区间翻转

LeetCode 92.反转链表
解法一:头插法。利用虚拟节点进行反转,因为头节点有可能发生变化,比如 left=1 那么需要 dummyNode.next 记录头结点,使用虚拟头节点可以避免复杂的分类讨论。
先遍历到 left-1 的节点作为 pre ,然后节点依次反转。
在这里插入图片描述
在这里插入图片描述

public ListNode reverseBetween(ListNode head, int left, int right) {ListNode dummyNode = new ListNode(-1);dummyNode.next = head;ListNode pre = dummyNode;for(int i=0;i<left-1;i++){pre = pre.next;}ListNode cur = pre.next;for(int i=0;i<right-left;i++){ListNode curNext = cur.next;cur.next = curNext.next;curNext.next = pre.next;pre.next = curNext;}return dummyNode.next;
}

解法二:穿针引线法。比方法一复杂点,找到 left-1 和 right+1 的位置,然后直接翻转 left 和 right 区间链表,之后拼接。
在这里插入图片描述

public ListNode reverseBetween(ListNode head, int left, int right) {ListNode dummyNode = new ListNode(-1);dummyNode.next = head;ListNode pre = dummyNode;for(int i=0;i<left-1;i++){pre = pre.next;}ListNode rightNode = pre;for(int i=0;i<right-left+1;i++){rightNode = rightNode.next;}ListNode suss = rightNode.next;// 记得置为null,不然会连right后面的部分也反转了。rightNode.next = null;ListNode ret = reverse(pre.next);pre.next.next = suss;pre.next = rightNode;return dummyNode.next;
}private ListNode reverse(ListNode head){ListNode cur = head.next;head.next = null;while(cur!=null){ListNode curNext = cur.next;cur.next = head;head = cur;cur = curNext;}
}

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

LeetCode 24. 两两交换链表中的节点

类似问题1,只不过区间变成相邻两个节点,仍然遍历链表找到每个区间的前置节点然后反转。

public ListNode swapPairs(ListNode head) {ListNode dummyNode = new ListNode(-1);dummyNode.next = head;ListNode pre = dummyNode;while(pre.next!=null && pre.next.next!=null){ListNode node1 = pre.next;ListNode node2 = pre.next.next;node1.next = node2.next;node2.next = node1;pre.next = node2;pre = node1;}return dummyNode.next;
}

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

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

相关文章

Arcgis通过模型构建器计算几何坐标

模型 模型中&#xff0c;先添加字段&#xff0c;再计算字段 计算字段 模型的计算字段中&#xff0c;表达式是类似这样写的&#xff0c;其中Xmin表示X坐标&#xff0c;Ymin表示Y坐标 !Shape.extent.Xmin!类似计算面积 !shape.area!

突破游戏行业天花板,“技术外溢”成趋势

文 | 螳螂观察 作者 | 余一 受游戏版号发放的“放缓”、人口结构的调整&#xff0c;过去两年国内游戏行业过得并不算好。前不久据相关机构发布的数据显示&#xff0c;2022年中国游戏市场实际销售收入2658.84亿元&#xff0c;同比减少306.29亿元&#xff0c;下降10.33%。且游戏…

创建个人博客(在文章的列表页,根据文章标题和文章内容实现搜索)

1. 在视图文件增加搜索表单&#xff1a; 在文章列表页的视图文件中&#xff0c;增加一个搜索表单&#xff0c;包含一个文本搜索框和一个提交按钮 <% form_tag articles_path, method: :get do %><% text_field_tag :title, params[:title], placeholder: "搜索…

海康视频插件VideoWebPlugin在vue中的实现

一,将js文件放在public文件下 二,在index中全局引入 三.在视频页面写方法,创建实例,初始化,我写的是1*4屏的 <template><!--视频窗口展示--><div idplayWnd classNameplayWnd refplayWnd styleleft: 0; bottom: 0;height: 902px;width: 60vw></div>&…

研究生阶段球形机器人水面运动部分研发项目总结文档

出现的问题 研发问题 存在闭门造车现象。闭门造车的特点就是每一步都是创新&#xff0c;但是这样的创新是没有意义的&#xff0c;因为实际上已经有人做出来了。闭门造车的后果&#xff0c;一是不管是否自己的尝试“如愿以偿”&#xff0c;都会耗费大量时间&#xff1b;二是由…

Spring JPA 实现动态SQL查询及分页

1.在持久层Service中创建EntityManager对象&#xff1b;PersistenceContext private EntityManager entityManager; 2.根据动态sql查询条目数/*** get total.*/ public Object getResultTotalBySql(String sql) {Query query entityManager.createNativeQuery(sql);return que…

Eureka 学习笔记2:EurekaClient

版本 awsVersion ‘1.11.277’ EurekaClient 接口实现了 LookupService 接口&#xff0c;拥有唯一的实现类 DiscoveryClient 类。 LookupService 接口提供以下功能&#xff1a; 获取注册表根据应用名称获取应用根据实例 id 获取实例信息 public interface LookupService<…

HTTP杂谈之Referer和Origin请求头再探

一 关于Referer和Origin的汇总 1) 知识是凌乱的,各位看官看个热闹即可2) 内容不断更新1、理解有盲区,需要及时纠正2、内容交叉有重复,需要适当删减3、扩展视野3) 以下内容都与Referer和Origin请求头有关联 nginx防盗链 HTTP杂谈之Referrer-Policy响应头 iframe标签referre…

物联网|可变参数的使用技巧|不一样的点灯实验|访问外设的寄存器|操作寄存器实现点灯|硬件编程的基本流程-学习笔记(11)

文章目录 可变参数的使用技巧第三阶段-初级实验Lesson5:不一样的点灯实验---学习I/O的输出 ☆点灯的电路图分析1 一起看看点灯的电路图Tip1:另一种点灯的电路Tip1:如何访问外设的寄存器2 STM32F407中操作GPIO的方法 通过直接操作寄存器实现点灯实验Tip1:硬件编程的基本流程 2代…

HTML5+CSS3小实例:带标题的3D多米诺人物卡片

实例:带标题的3D多米诺人物卡片 技术栈:HTML+CSS 效果: 源码: 【html】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" content…

【3】C++实现多进程、多线程

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录前言一、同步与互斥1、【thread】同步并发的方法(1)创建、终止、等待、分离线程的方法1.创建线程形式1:使用一个循环执行的函数创建一个线程形式2:…

【信号去噪】基于马氏距离和EDF统计(IEE-TSP)的基于小波的多元信号去噪方法研究(Matlab代码实现)

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

Linux 终端生成二维码

1、安装qrencode [rootnode1 script]# yum -y install qrencode2、输出正常的 [rootnode1 aihuidi]# echo https://blog.csdn.net/weixin_43822878?t1|qrencode -o - -t utf83、输出彩色的 [rootnode1 aihuidi]# qrencode -t utf8 -s 1 https://blog.csdn.net/weixin_4382…

bash shell 杂记(4)-shell常用的几种逻辑判断与运算

严格意义上讲,本章没有多少新意,都是一些经常使用的东西,写这些的目的是记录以下,想用而想不起来的时候可以在这里找找看。 常用算数运算 我们一般使用两种方式 let 和 $(()) count=1 forlinx@ubuntu:~/test$ max=2 forlinx@ubuntu:~/test$ count=$((count+5+max*2)) fo…

Ubuntu 22.04 LTS 安装nvidia-docker NVIDIA Container Toolkit

安装docker sudo apt install docker.io docker info yeqiangyeqiang-MS-7B23:~$ sudo docker info Client:Context: defaultDebug Mode: falseServer:Containers: 12Running: 0Paused: 0Stopped: 12Images: 67Server Version: 20.10.21Storage Driver: overlay2Backing …

魔法上网端口号被占用通过端口号找到进程并且杀掉进程随笔

Windows11系统由于魔法上网被异常关闭导致再次启动的时候报出端口号被占用问题记录以前忘记的通过端口杀掉进程相关操作。 在命令行&#xff08;winr,输入cmd&#xff09;中输入: netstat -ano 可以看到本机正在使用的ip地址和端口号如图&#xff1a; 在命令行&#xff08;wi…

算法题--找规律(构建乘积数组、剪绳子、圆圈中最后剩下的数字)

目录 找规律 构建乘积数组 原题链接 解析 核心思想 答案 剪绳子 原题链接 解析 核心思想 答案 圆圈中最后剩下的数字 原题链接 解析 核心思想 答案 找规律 需要通过列举多个示例&#xff0c;从多个示例的输入到输出中得到规律去普遍化。 构建乘积数组 给定…

【娱乐圈明星知识图谱2】信息抽取

目录 1. 项目介绍 2. 信息抽取介绍 3. ChatGPT 信息抽取代码实战 4. 信息抽取主逻辑 5. 项目源码 1. 项目介绍 利用爬虫项目中爬取的大量信息 【娱乐圈明星知识图谱1】百科爬虫_Encarta1993的博客-CSDN博客娱乐圈明星知识图谱百度百科爬虫百度百科爬虫百度百科爬虫百度百…

Ansible的脚本——playbook剧本

Ansible的脚本——playbook剧本 一、Ansible playbook简介1、playbook格式2、playbook组成部分 二、示例三、Templates模块四、tags模块五、Roles模块 一、Ansible playbook简介 playbooks是 一个不同于使用Ansible命令行执行方式的模式&#xff0c;其功能更强大灵活。简单来说…

redisson分布式锁学习

什么是分布式锁? 当有多个线程并发访问同一共享数据时,如果多个线程同时都去修改这个共享数据,且修改操作不是原子操作,就很有可能出现线程安全问题&#xff0c;而产生线程安全问题的根本原因是缺乏对共享数据访问的同步和互斥。 为了解决这个问题&#xff0c;通常我们的做法…