<习题集><LeetCode><链表><2/19/21/23/24>

news2024/11/27 18:29:16

目录

2. 两数相加

19. 删除链表的倒数第 N 个结点

21. 合并两个有序链表

23. 合并 K 个升序链表

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



2. 两数相加

https://leetcode.cn/problems/add-two-numbers/

    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        //head是cur链表头节点,cur用于记录相加和的链表;
        ListNode head = new ListNode();
        ListNode cur = head;
        //进位标志;
        int flag = 0;
        //两个用于相加的链表都走到null,结束;
        while(l1!=null || l2!=null){
            int l1Val = l1==null ? 0 : l1.val;
            int l2Val = l2==null ? 0 : l2.val;
            //计算和;
            int sum = l1Val+l2Val+flag;
            //新建节点加入cur链表中;
            cur.next = new ListNode(sum%10);
            //判断是否需要进位;
            if(sum>=10){
                flag=1;
            }else {
                flag=0;
            }
            //判断两个用于相加的链表是否走到null,没到的才继续走;
            if(l1!=null){
                l1 = l1.next;
            }
            if(l2!=null){
                l2 = l2.next;
            }
            //cur链表也向后移动;
            cur = cur.next;
        }
        //走到这里代表两个链表已经遍历完毕;
        //但是可能最后一次相加也产生了进位,因此在这里要判断;
        if(flag == 1){
            cur.next = new ListNode(1);
        }
        //头节点是空值,返回头节点的下一节点;
        return head.next;
    }

19. 删除链表的倒数第 N 个结点

https://leetcode.cn/problems/remove-nth-node-from-end-of-list/

    public ListNode removeNthFromEnd(ListNode head, int n) {
        //创建快慢指针,两个指针的next为head;
        ListNode fast = new ListNode();
        ListNode slow = new ListNode();
        fast.next = head;
        slow.next = head;
        //记录慢指针的头节点,用于返回;
        ListNode root = slow;
        //快指针先走n步;
        for (int i=n;i>0;i--){
            fast = fast.next;
            //处理n大于链表长度的情况;
            if(fast == null){
                return null;
            }
        }
        //依次移动快慢指针,直到快指针的next为null;
        //此时代表慢指针到达要删除的元素的前一位值;
        while (fast.next != null){
            fast = fast.next;
            slow = slow.next;
        }
        //删除下一元素;
        slow.next = slow.next.next;
        //返回;
        return root.next;
    }

21. 合并两个有序链表

https://leetcode.cn/problems/merge-two-sorted-lists/description/

    public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
        //创建头节点和一个用于移动的节点cur;
        ListNode head = new ListNode(0);
        ListNode cur = head;
        //边移动,边比较节点的值,并将比较结果赋值,直到有一个链表走完;
        while(list1 != null && list2 != null){
            if(list1.val <= list2.val){
                cur.next = list1;
                list1 = list1.next;
            }else{
                cur.next = list2;
                list2 = list2.next;
            }
            cur = cur.next;
        }
        //判断是哪个链表走完了,把另一个链表在尾部续上;
        if(list1 == null){
            cur.next = list2;
        }
        if(list2 == null){
            cur.next = list1;
        }
        //返回记录的head;
        return head.next;
    }

23. 合并 K 个升序链表

https://leetcode.cn/problems/merge-k-sorted-lists/description/

    public ListNode mergeKLists(ListNode[] lists) {
        //建立链表;
        ListNode root = null;
        //不断将链表元素两两合并;
        for (ListNode list : lists) {
            root = mergeTwoLists(root, list);
        }
        //返回链表;
        return root;
    }
    public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
        //创建头节点和一个用于移动的节点cur;
        ListNode head = new ListNode(0);
        ListNode cur = head;
        //边移动,边比较节点的值,并将比较结果赋值,直到有一个链表走完;
        while(list1 != null && list2 != null){
            if(list1.val <= list2.val){
                cur.next = list1;
                list1 = list1.next;
            }else{
                cur.next = list2;
                list2 = list2.next;
            }
            cur = cur.next;
        }
        //判断是哪个链表走完了,把另一个链表在尾部续上;
        if(list1 == null){
            cur.next = list2;
        }
        if(list2 == null){
            cur.next = list1;
        }
        //返回记录的head;
        return head.next;
    }

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

https://leetcode.cn/problems/swap-nodes-in-pairs/

    public ListNode swapPairs(ListNode head) {
        //基本思路就是站在前一个节点(后续简称0节点),向后望两个节点。
        //并对这两个节点做顺序调换,之后0节点向后移动;

        //创建移动的节点指针,这个节点指向head,这个就是一开始的0节点;
        ListNode cur = new ListNode();
        cur.next = head;
        //记录头节点地址,用于返回;
        ListNode root = cur;

        while(true){
            //没有后续节点的情况;
            if(cur.next == null){
                break;
            }
            //仍存在两个后续节点的情况;
            if(cur.next.next != null){
                //记录下一次需要调整顺序的节点;
                ListNode temp2 = cur.next.next.next;
                //调整顺序;
                ListNode temp1 = cur.next;
                cur.next = cur.next.next;
                cur = cur.next;
                cur.next = temp1;
                //将节点移动到下一次调整的0节点处;
                cur = cur.next;
                cur.next = temp2;
            }else{
                //只剩一个节点的情况;
                break;
            }
        }
        //代码运行到这代表,0节点之后已经没有节点或只剩一个节点;
        //返回记录的头节点;
        return root.next;
    }

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

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

相关文章

拼多多选品大作战:通过热词选利润赛道

相信很多人都听过一句话&#xff1a;找对了风口&#xff0c;猪都能飞起来。 我们电商人也应如此&#xff0c;从行业分析到选品都应快速跟上市场节奏。 今天就给大家分享一下如何通过热词来进行一个行业类目的分析与选择。 01 热词是什么 热词通常指的是热搜词和飙升词&#…

大华DSS S2-045 OGNL表达式注入漏洞复现

0x01 产品简介 大华DSS安防监控系统平台是一款集视频、报警、存储、管理于一体的综合安防解决方案。该平台支持多种接入方式,包括网络视频、模拟视频、数字视频、IP电话、对讲机等。此外,该平台还支持多种报警方式,包括移动侦测、区域入侵、越线报警、人员聚集等。 0x02 漏…

天津大数据培训机构品牌 数据分析师的发展方向

大数据专业还是有一定难度的&#xff0c;毕竟大数据开发技术所包含的编程技术知识是比较杂且多的如果是计算机专业的学生或者自身有一定基础的人学&#xff0c;相对来说会比较容易&#xff0c;但对于零基础小伙伴学习来说&#xff0c;想要学习大数据&#xff0c;难度还是很高的…

C# 编程新手必看,一站式学习网站,让你轻松掌握 C# 技能!

介绍&#xff1a;实际上&#xff0c;您可能弄错了&#xff0c;C#并不是一种独立的编程语言&#xff0c;而是一种由微软公司开发的面向对象的、运行于.NET Framework之上的高级程序设计语言。C#看起来与Java十分相似&#xff0c;但两者并不兼容。 C#的设计目标是简单、强大、类型…

时间序列预测 — VMD-LSTM实现单变量多步光伏预测(Tensorflow):单变量转为多变量

目录 1 数据处理 1.1 导入库文件 1.2 导入数据集 1.3 缺失值分析 2 VMD经验模态分解 3 构造训练数据 4 LSTM模型训练 5 预测 1 数据处理 1.1 导入库文件 import time import datetime import pandas as pd import numpy as np import matplotlib.pyplot as plt f…

系列八、SpringBoot中自定义SpringMVC配置

一、概述 作为Spring家族的明星产品&#xff0c;SpringBoot极大地简化了程序员的日常开发&#xff0c;提高了开发效率。我们很容易得借助于SpringBoot就可以快速开发业务代码。一般情况下&#xff0c;公司的日常开发都是基于web服务的&#xff0c;我们在使用idea等工具初始化一…

SecureCRT9汉化版安装详解

CRT中文版安装说明 一、安装步骤1. 安装注意&#xff1a;2. 右键压缩包&#xff0c;解压到本地文件夹内3. 解压后进入目录&#xff0c;双击CRT_SFX_91_Run_Script激活脚本 3 如果运行结果是下图&#xff0c;就激活成功了&#xff1a;4. 双击桌面的CRT和FX图标5. 如果提示下图&a…

Qt简介、工程文件分离、创建Qt工程、Qt的帮助文档

QT 简介 core&#xff1a;核心模块&#xff0c;非图形的接口类&#xff0c;为其它模块提供支持 gui&#xff1a;图形用户接口&#xff0c;qt5之前 widgets&#xff1a;图形界面相关的类模块 qt5之后的 database&#xff1a;数据库模块 network&#xff1a;网络模块 QT 特性 开…

VisualStudio反汇编功能使用

VisualStudio反汇编功能使用 使用方法 到达断点时&#xff1a;CtrlK&#xff08;松开&#xff09;G&#xff08;后按&#xff09;唤出反汇编界面&#xff0c;就可以看到当前代码对应的汇编语言了 注意&#xff1a;进入反汇编窗口后可以F10单次调试一条汇编指令 其他&#…

3.添加与删除字段

添加字段与删除字段 1.添加字段 因为甲方的业务需求是不停变化的&#xff0c;所以在数据库操作中&#xff0c;添加字段可是常有的事。一个完整的字段包括&#xff1a;字段名、数据类型和完整性约束。 语法规则为&#xff1a; ALTER TABLE 表名 ADD 新字段名 数据类型 [约束条…

SPECPOWER2008

一、前言# 1、软件说明# 官网&#xff1a;SERT套件用户指南2.0.5SPECpower介绍SPEC基准及工具SPECpower_ssj2008测试结果SPECpower_ssj2008-Design_ccs - SPEC# SPEC&#xff08;the Standard Performance Evaluation Corporation&#xff09;是一个由计算机硬件厂商、软件公…

JPA对数据库修改注意点

同一事务中获取不到修改数据 spring-boot-starter-parent版本2.7.12 Dao Query(value "select * from inventory_list where id in (?1) order by id desc",nativeQuery true) List<InventoryListEntity> getByIds(List<Integer> idList);Modifyin…

openharmony 开发环境搭建和系统应用编译傻瓜教程

一、DevEco Studio 安装 当前下载版本有两个&#xff0c;由于低版本配置会有各种问题&#xff0c;我选择高版本安装 低版本下载链接 HUAWEI DevEco Studio和SDK下载和升级 | HarmonyOS开发者 高版本下载链接 OpenAtom OpenHarmony 解压后安装 双击安装 安装配置 二、创建测…

字符串指令集

字符串指令的格式 例子1就成功发送了指令 例子2就是发送的字符串有误 查询当前位置就会在附加信息中返回当前座位的坐标 第一个指令的参数就是闪灯的两个参数 如第一个示例就是10ms On Time 第二个就是Off Time 使用标准库来接收字符串命令 字符串指令的接收 因为一个指令就是…

vue实现可拖拽列表

直接上代码 <!-- vue实现可拖拽列表 --> <template><div><button click"logcolig">打印数据</button><TransitionGroup name"list" tag"div" class"container"><divclass"item"v-f…

『PyTorch学习笔记』如何快速下载huggingface模型/数据—全方法总结

如何快速下载huggingface模型/数据—全方法总结 文章目录 一. 如何快速下载huggingface大模型1.1. IDM(Windows)下载安装连接1.2. 推荐 huggingface 镜像站1.3. 管理huggingface_hub cache-system(缓存系统) 二. 参考文献 一. 如何快速下载huggingface大模型 推荐 huggingface…

0013Java程序设计-基于Vue的上课签到系统的设计与实现

文章目录 **摘 要**目录系统设计4.2学生签到4.3 签到信息列表4.4 用户信息管理5.1系统登录5.1.1 登录5.1.2 清除用户登记记录5.1.3 登录拦截 5.2用户管理5.2.2 用户添加5.2.3 用户编辑5.2.4 用户删除5.2.5 用户分页 5.3签到信息5.3.1签到信息列表 5.4学生签到5.4.1学生签到 开发…

智能运维相关算法总结

概念&#xff1a; 智能运维&#xff08;AIOps&#xff09;是基于已有的运维数据&#xff08;日志、监控信息 、应用信息&#xff09;并通过机器学习的方法来进一步解决自动化运维没办法解决的问题&#xff0c;其核心是机器学习和大数据平台。 目标&#xff1a; 事前预警&…

ssh免密登录gitee

文章目录 一、简介二、实现流程1. 生成公钥和私钥 2、在Gitee上创建仓库3、GoLand的连接Gitee4、上传 实现本机与Gitee码云之间的免密码登录&#xff0c;通过SSH协议&#xff0c;用于通过Git与远程仓库进行通信&#xff0c;将本地仓库推送到远程仓库 参考&#xff1a;gitee git…

043:vue项目一直出现 sockjs-node/info?t=XX的解决办法

第043个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下&#xff0c;本专栏提供行之有效的源代码示例和信息点介绍&#xff0c;做到灵活运用。 &#xff08;1&#xff09;提供vue2的一些基本操作&#xff1a;安装、引用&#xff0c;模板使…