数据结构-链表刷题集(长期更新)

文章目录

          • 1. leetcode 2 两数之和
            • 1.1 解法一

1. leetcode 2 两数之和
1.1 解法一

题目及其相关实例如下
在这里插入图片描述
在这里插入图片描述
要做这个题,首先我们要学会模拟竖式的加法,我们知道即使是java基本数据中最大的long类型范围也是有限的,那如果超出范围了我们该怎么办呢,我们就需要用字符串来模拟这个加法的过程
思路分析:
1.将字符串转化为字符数组进行存储(toCharArray方法)
2.把字符数组逆序操作变为数字数组(逆序的原因是模拟竖式对齐)
3.创建一个ret数组用来保存逐个相加的结果
4.最后逆序输出ret数组就是最终的答案
代码实现如下

public static void addNumber(String s1,String s2){
        //这是我们的准备工作,先把字符串转换为字符数组,创建的arr1数组用来存放c1中的数字,arr2数组用来存放c2中的数字,创建一个返回数组用来输出结果
        char[] c1 = s1.toCharArray();
        char[] c2 = s2.toCharArray();
        int len1 = c1.length;
        int len2 = c2.length;
        int[] arr1 = new int[len1];
        int[] arr2 = new int[len2];
        int maxlen = len1 > len2 ? len1 : len2;
        int minlen = len1 > len2 ? len2 : len1;
        int[] ret = new int[maxlen + 1];

        //下面的工作是把字符串进行翻转并进行存储,用来模拟竖式相加对齐
        for(int i = len1 - 1; i >= 0; --i){
            arr1[len1 - 1 -i] = c1[i] - '0';
        }
        for(int i = len2 - 1; i >= 0; --i){
            arr2[len2 - 1 - i] = c2[i] - '0';
        }

        //下面我们模拟竖式的相加
        for(int i = 0; i < maxlen; ++i){
            if(i < minlen){
                ret[i + 1] = (ret[i] + arr1[i] + arr2[i]) / 10;
                ret[i] = (ret[i] + arr1[i] + arr2[i]) % 10;
            }else if(minlen == len1){
                ret[i + 1] = (ret[i] + arr2[i]) / 10;
                ret[i] = (ret[i] + arr2[i]) % 10;
            }else{
                ret[i + 1] = (ret[i] + arr1[i]) / 10;
                ret[i] = (ret[i] + arr1[i]) % 10;
            }
        }
		//因为是逆序的,需要判断最后一个是不是0
        if(ret[ret.length - 1] == 0) {
            ret = Arrays.copyOf(ret, ret.length - 1);
        }

        for(int i = 0; i < ret.length / 2; ++i){
            int temp = ret[i];
            ret[i] = ret[ret.length - 1 - i];
            ret[ret.length - 1 -i] = temp;
        }

        System.out.println(Arrays.toString(ret));
    }

有了上面的铺垫,我们的两数相加其实就是这个原理,由于我们不知道具体链表的长度(可以整一个size方法,但是没必要),我们直接用顺序表来代替数组来进行操作,依然是模拟竖式相加,最后逐个new新节点进行串联即可(创建一个虚拟的节点进行连接)
代码实现如下

/**
 * 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 addTwoNumbers(ListNode l1, ListNode l2) {
        if(l1 == null || l2 == null){
            return null;
        }
         //我们通过创建一个集合类解决吧
        List<Integer> list1 = new ArrayList<>();
        List<Integer> list2 = new ArrayList<>();

        //开始遍历我们的链表
        ListNode cur = l1;
        while(cur != null) {
            int temp = cur.val;
            list1.add(temp);
            cur = cur.next;
        }
        ListNode curN = l2;
        while(curN != null) {
            int temp = curN.val;
            list2.add(temp);
            curN = curN.next;
        }

        //上面的那一步其实就相当于是把字符存入数组
        int len1 = list1.size();
        int len2 = list2.size();
        int maxlen = len1 > len2 ? len1 : len2;
        int minlen = len1 > len2 ? len2 : len1;
        int[] ret = new int[maxlen + 1];


        //跟上面的模拟不一样的这个是,这个本来就是逆序的,所以不用进行反转
        //开始模拟竖式相加的求和操作
        for(int i = 0; i < maxlen; ++i){
            if(i < minlen){
                ret[i + 1] = (ret[i] + list1.get(i) + list2.get(i)) / 10;
                ret[i] = (ret[i] + list1.get(i) + list2.get(i)) % 10;
            }else if(minlen == len1){
                ret[i + 1] = (ret[i] + list2.get(i)) / 10;
                ret[i] = (ret[i] + list2.get(i)) % 10;
            }else{
                ret[i + 1] = (ret[i] + list1.get(i)) / 10;
                ret[i] = (ret[i] + list1.get(i)) % 10;
            }
        }

        //模拟竖式相加成功,现在看看最后一位是不是0(因为是倒叙求和的)
        if(ret[ret.length - 1] == 0){
            ret = Arrays.copyOf(ret,ret.length - 1);
        }

        //最后采用虚拟节点法把这ret中的节点都连接起来即可
        ListNode head = new ListNode(-1);
        cur = head;
        for(int i = 0; i < ret.length ; ++i){
            ListNode node = new ListNode(ret[i]);
            cur.next = node;
            cur = cur.next;
        }
        
        //最后返回虚拟节点的下一个位置
        return head.next;
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于Java的XxlCrawler网络信息爬取实战-以中国地震台网为例

目录 前言 一、信息网站介绍 1、网站介绍 2、 地震历史信息 3、 历史信息接口分析 二、XxlCrawler组件 1、关于XxlCrawler 2、核心概念介绍 三、实际信息爬取 1、新建maven项目 2、新建model层对象 3、实际爬取 总结 前言 如今&#xff0c;只要谈起网络信息爬取也就…

配置交换机端口安全

1、实验目的 通过本实验可以掌握&#xff1a; 交换机管理地址配置及接口配置。查看交换机的MAC地址表。配置静态端口安全、动态端口安全和粘滞端口安全的方法。 2、实验拓扑 配置交换机端口安全的实验拓扑如图所示。 配置交换机端口安全的实验拓扑 3、实验步骤 &#xff…

set 类 和 map 类

1. 关联式容器 关联式容器也是用来存储数据的&#xff0c;与序列式容器不同的是&#xff0c;其里面存储的是<key, value>结构的 键值对&#xff0c;在数据检索时比序列式容器效率更高 2. 键值对 用来表示具有一一对应关系的一种结构&#xff0c;该结构中一般只包含…

JVM之JVM的基本介绍

基本介绍 JVM&#xff1a;全称 Java Virtual Machine&#xff0c;即 Java 虚拟机&#xff0c;一种规范&#xff0c;本身是一个虚拟计算机&#xff0c;直接和操作系统进行交互&#xff0c;与硬件不直接交互&#xff0c;而操作系统可以帮我们完成和硬件进行交互的工作 特点&…

Docker Image (镜像) 常见命令

Docker Image (镜像) 常用命令 docker images 功能&#xff1a;列出本地所有的镜像。如果镜像 ID 相同&#xff0c;但是 Tag 标签不同&#xff0c;也会被当作不同的条目被列出来。 语法&#xff1a; docker images [options] [REPOSITORY[:TAG]] 别名&#xff1a; docker ima…

【fastapi】搭建第一个fastapi后端项目

本篇文章介绍一下fastapi后端项目的搭建。其实没有什么好说的&#xff0c;按照官方教程来即可&#xff1a;https://fastapi.tiangolo.com/zh/ 安装依赖 这也是我觉得python项目的槽点之一。所有依赖都安装在本地&#xff0c;一旦在别人电脑上编写项目就又要安装一遍。很扯淡。…

mysql搭建主从

mysql搭建主从: 1:拉取mysql镜像 docker pull mysql2:创建主从对应目录 3:建立一个简易的mysql docker run -it --name mytest -e MYSQL_ROOT_PASSWORD123 -d mysql4:进入这个简易的mysql;从中获取my.cnf文件 docker exec -it mytest bash5:从容器中将my.cnf拷贝到 /3306/c…

ADC的认识

ADC介绍 Q:ADC是什么&#xff1f; A&#xff1a;全称&#xff1a;Analog-to-Digital Converter&#xff0c;指模拟/数字转换器 ADC的性能指标 量程&#xff1a;能测量的电压范围分辨率&#xff1a;ADC能辨别的最小模拟量&#xff0c;通常以输出二进制数的位数表示&#xf…

康耐视visionpro-CogBlobTool工具操作详细说明

CogBlobTool功能说明: 通过设置灰度值提取感兴趣区域,并分析所提取区域的面积、长宽等参数。 Cog BlobTool操作说明: .打开工具栏,双击或点击鼠标拖拽添加CogBlobTool工具 ②.添加输入图像:单击鼠标右键“链接到”或以连线拖拽的方式选择相应输入源 ③.极性: “白底黑点…

搭建基于Hexo的个人博客,以及git相关命令

全文写完之后的总结 测试命令 hexo clean hexo g hexo s 上传到服务器命令 hexo clean hexo g hexo d 上传到服务器&#xff08;如果上一个命令用不了&#xff09;&#xff0c;也要先hexo clean,hexo g git init git add . git commit -m "first commit" git p…

vscode配置c\c++及美化

文章目录 vscode配置c\c及美化1.安装vscode2.汉化3.安装c\c插件4.安装mingw5.配置mingw6. 运行c代码6.1 创建代码目录6.2 设置文件配置6.3 创建可执行任务&#xff1a;task.json6.4 编译执行6.5 再写其他代码6.6 运行多个c文件 7. 运行c文件8.调式代码8.1 创建launch.json8.2 修…

jenkins下载安装(mac)

下载官网 具体 直接命令安装 Sample commands: Install the latest LTS version: brew install jenkins-ltsStart the Jenkins service: brew services start jenkins-ltsRestart the Jenkins service: brew services restart jenkins-ltsUpdate the Jenkins version: brew u…

Requests,一个强大的 Python 库

Requests&#xff0c;一个强大的 Python 库 ​ 一. 介绍 在当今的互联网时代&#xff0c;网络数据的获取和处理变得尤为重要。无论是数据科学家获取数据集&#xff0c;还是开发者与外部API进行交互&#xff0c;都需要一个强大且易于使用的HTTP库来帮助完成这些任务。这就是r…

2024年认证杯数学建模挑战赛C题全解析

2024年认证杯C题的已经完成啦&#xff0c;包括参考论文&#xff0c;模型代码&#xff0c;分享给大家&#xff5e; 问题分析 对于这些问题&#xff0c;我们首先需要确定影响日光辐射降低效应的关键参数&#xff0c;例如海盐气溶胶的浓度、粒子大小、分布以及喷洒高度和范围。同…

英特尔、联想等服务器曝出难以修复的漏洞

文章目录 前言一、漏洞潜伏六年,服务器供应链安全堪忧二、漏洞广泛存在但难以修复前言 近日,英特尔、联想等多个厂商销售的服务器硬件曝出一个难以修复的远程可利用漏洞。该漏洞属于供应链漏洞,源自一个被多家服务器厂商整合到产品中的开源软件包——Lighttpd。 Lighttpd是…

【C++算法竞赛 · 图论】图的存储

前言 图的存储 邻接矩阵 方法 复杂度 应用 例题 题解 邻接表 方法 复杂度 应用 前言 上一篇文章中&#xff08;【C算法竞赛 图论】图论基础&#xff09;&#xff0c;介绍了图论相关的概念和一种图的存储的方法&#xff0c;这篇文章将会介绍剩下的两种方法&#xff…

elasticSearch从零整合springboot项目实操

type会被弃用 &#xff0c;就是说之后的elasticSearch中只会存在 索引&#xff08;indices&#xff09; 和 一行&#xff08;document&#xff09; 和字段&#xff08;fields&#xff09; elasticSearch 和solr的区别最大的就是 es对应的 是 json的格式 。 solr有xml和josn等…

OpenHarmony实例应用:【常用组件和容器低代码】

介绍 本篇Codelab是基于ArkTS语言的低代码开发方式实现的一个简单实例。具体实现功能如下&#xff1a; 创建一个低代码工程。通过拖拽的方式实现任务列表和任务信息界面的界面布局。在UI编辑界面实现数据动态渲染和事件的绑定。 最终实现效果如下&#xff1a; 相关概念 低代…

【opencv】示例-points_classifier.cpp 使用不同机器学习算法在二维空间中对点集进行分类...

#include "opencv2/core.hpp" // 包含OpenCV核心功能的文件 #include "opencv2/imgproc.hpp" // 包含OpenCV图像处理功能的文件 #include "opencv2/ml.hpp" // 包含OpenCV机器学习模块的文件 #include "opencv2/highgui.hpp" // 包含O…

【MIT6.S081】Lab3: page tables(详细解答版)

实验内容网址&#xff1a;https://xv6.dgs.zone/labs/requirements/lab3.html 本实验的代码分支&#xff1a;https://gitee.com/dragonlalala/xv6-labs-2020/tree/pgtbl2/ Print a page table 关键点&#xff1a;递归、三级页表 思路&#xff1a; 用上图来解释三级页表的原理最…