<习题集><LeetCode><链表><61/83/82/86/92>

news2024/11/25 11:17:59

目录

61. 旋转链表

83. 删除排序链表中的重复元素

82. 删除排序链表中的重复元素 II

86. 分隔链表

92. 反转链表 II



61. 旋转链表

https://leetcode.cn/problems/rotate-list/

    public ListNode rotateRight(ListNode head, int k) {
        //k等于0,或者head为空,直接返回head;
        if(k == 0 || head == null){
            return head;
        }
        //创建last用于记录尾节点,移动last找到尾节点,同时计算链表长度n;
        ListNode last = head;
        int n = 1;
        while(last.next != null){
            n++;
            last = last.next;
        }
        //k取模,避免重复翻转的情况;
        k = k%n;
        //k等于0,不用翻转直接返回head;
        if(k == 0){
            return head;
        }
        //创建移动的指针节点,找到开始翻转的节点的前一个节点;
        ListNode cur = head;
        int step = n-k;
        for(int i=step-1;i>0;i--){
            cur = cur.next;
        }
        //记录开始翻转的节点,这个节点就是返回的新链表的头节点。
        ListNode root = cur.next;
        //将尾节点和头节点连接;
        last.next = head;
        //截断开始翻转的前一个节点;
        cur.next = null;

        return root;
    }

83. 删除排序链表中的重复元素

https://leetcode.cn/problems/remove-duplicates-from-sorted-list/

    public ListNode deleteDuplicates(ListNode head) {
        //head为空,直接返回head;
        if (head == null) {
            return head;
        }
        //创建一个用于移动的指针节点;
        ListNode cur = head;
        //遍历链表,下一节点为空时,代表遍历完成;
        while (cur.next != null) {
            //如果前后节点值相等,则将后节点删除,前节点指向更后一个节点;
            if(cur.val == cur.next.val){
                cur.next = cur.next.next;
            }else{
                //否则向后移动;
                cur = cur.next;
            }
        }

        return head;
    }

82. 删除排序链表中的重复元素 II

https://leetcode.cn/problems/remove-duplicates-from-sorted-list-ii/

    public ListNode deleteDuplicates(ListNode head) {
        //如果链表为空,返回null;
        if(head == null){
            return null;
        }

        //创建一个用于移动的指针节点,这个节点初始位置在head前;
        ListNode cur = new ListNode(-1,head);
        //记录节点cur的初始位置,用于返回;
        ListNode root = cur;

        //当cur的后两个位置有值时;
        while(cur.next!=null && cur.next.next!=null){
            //判断两个值是否相等;
            if(cur.next.val == cur.next.next.val){
                //相等则记录前一个值;
                ListNode curNext = cur.next;
                //在后一个值存在的前提下,将前一个值不断和后一个值比较;
                while(curNext.next!=null && curNext.val == curNext.next.val){
                    //如果前后值相等,则前值后移;
                    curNext = curNext.next;
                }
                //通过上述循环,走到此处则是遇到前后值不同的两个节点了;
                //将移动的指针节点cur的next,指向这个不同的后值。
                cur.next = curNext.next;
            }else{
                //如果前后值不相等,则cur向后移动;
                cur = cur.next;
            }
        }
        //返回记录的节点;
        return root.next;
    }

86. 分隔链表

https://leetcode.cn/problems/partition-list/

    public ListNode partition(ListNode head, int x) {
        //如果链表为空,直接返回;
        if(head == null){
            return null;
        }
        //建立两个链表,分别存储小于x和大于等于x的节点;
        ListNode less = new ListNode(-1);
        ListNode lCur = less;
        ListNode greater = new ListNode(-1);
        ListNode gCur = greater;
        //移动head节点,根据head节点值的大小为上面两个链表分配节点;
        while(head != null){
            if(head.val < x){
                lCur.next = head;
                lCur = lCur.next;
            }else{
                gCur.next = head;
                gCur = gCur.next;
            }
            head = head.next;
        }
        //greater链表肯定是放在两个链表偏后的,将这个链表的尾部置空,避免环形链表;
        gCur.next = null;
        //如果less为空,直接返回greater链表,注意返回的是next;
        if(less.next == null){
            return greater.next;
        }else{
            //如果less不为空,将less链表的尾部指向greater链表后,返回;
            lCur.next = greater.next;
            return less.next;
        }
    }

92. 反转链表 II

https://leetcode.cn/problems/reverse-linked-list-ii/

    public ListNode reverseBetween(ListNode head, int left, int right) {
        //因为head有可能被改变,创建一个节点,指向head,用于返回;
        ListNode root = new ListNode(-1,head);
        //创建节点pre,并将pre移动到指定开始翻转的节点的前一个节点;
        ListNode pre = root;
        for (int i=0;i<left-1;i++) {
            pre = pre.next;
        }
        //创建一个节点cur,cur指向需要反转的第一个节点;
        //cur最终会转到需要反转的最后一个节点位置上;
        ListNode cur = pre.next;

        for(int i=0;i<right-left;i++){
            //先记录cur的下一个节点;
            ListNode curNext = cur.next;
            //将cur的下一节点指向下下个节点;
            cur.next = curNext.next;
            //将curNext的下一节点指向pre的下一节点;
            //注意不要指向cur,因为cur一直在移动;
            curNext.next = pre.next;
            //将pre的下一节点指向curNext;
            //因为每次curNext都会更新;
            //这代表pre的下一节点指向的节点会随着循环的进行逐渐指向right的那个节点;
            pre.next =curNext;
        }
        return root.next;
    }

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

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

相关文章

高效利用内存资源之动态内存管理详解

目录 一、为什么存在动态内存分配 二、动态内存函数的介绍 2.1malloc 2.2free 2.3calloc 2.4realloc 三、常见的动态内存错误 3.1对NULL指针的解引用操作 3.2对动态开辟空间的越界访问 3.3对非动态开辟内存使用free释放 3.4使用free释放一块动态开辟内存的一部分 3.…

GNSS 精密单点定位(PPP) 所需数据文件及格式说明

目录 1.PPP所需的数据文件 (1)PPP中必要文件&#xff1a; (2)其他非必要文件&#xff1a; (3)文件示例&#xff1a; 2.数据下载方式 (1)网址下载&#xff1a; (2)GAMP II-GOOD软件下载 1.PPP所需的数据文件 (1)PPP中必要文件&#xff1a; 文件 功能 •观测值文件&…

降采样方法对NCC得分的影响因素评估

定位算法原理 关于不同的定位场景,最适合使用的算法原理,Halcon的原理文档中描述如下: 在图案缩放可用忽略,图案纹理丰富的场景,适合采用基于互相关的匹配。 输入参考图像,搜索图像,参考图像在搜索图像上滑动,得到滑动位置的NCC得分。如下图所示,高于阈值的最亮的地…

【多组学数据驱动的机器学习:生物医学研究的创新与突破】

简介&#xff1a;随着生物医学研究的不断发展&#xff0c;多组学数据在疾病预防、诊断和治疗方面发挥着越来越重要的作用。本文将介绍如何利用机器学习技术对多组学数据进行综合分析&#xff0c;以及这种方法在生物医学研究中的优势和潜力。 正文&#xff1a; 一、多组学数据…

linux搭建seata并使用

搭建seata 官网 在linux下搭建 下载1.6.1版本&#xff1a;地址 新建文件夹、上传压缩包并解压 [roothao ~]# cd /usr/local/software/ [roothao /usr/local/software]# ls canal docker elk gitlab jdk mysql nacos nexus nginx rabbitmq redis redis_sentinel…

【Linux】free命令使用

free命令 ​free是指查看当前系统内存的使用情况&#xff0c;它显示系统中剩余及已用的物理内存和交换内存&#xff0c;以及共享内存和被核心使用的缓冲区。 作者 作者&#xff1a;Brian Edmonds。 语法 free [参数] free 命令 -Linux手册页 命令选项及作用 执行令 &am…

ArcGIS无法绘制一个或多个图层

背景&#xff1a;在导入一份数据时候&#xff0c;arcmap出现无法绘制一个或多个图层的错误&#xff0c;...点数少于要素所要求的的数量&#xff0c;查阅了半天资料发现是制作数据时候拓扑关系错误造成&#xff0c;现将处理方法详细记录如下&#xff1a; 1.原数据&#xff1a; …

如何使用GaussDB创建外表(FOREIGN TABLE)

目录 一、前言 二、创建外表的特点 二、GaussDB创建外表访问外部数据库表&#xff08;示例&#xff09; 1、创建外表 2、FAQ&#xff1a;CREATE USER MAPPING错误 三、GaussDB创建外表映射数据文件&#xff08;示例&#xff09; 1、创建数据文件 2、创建外表 3、FAQ&a…

使用torch解决线性回归问题

数据处理 import torch import numpy as np import pandas as pd import matplotlib.pyplot as pltdatapd.read_csv(./datasets/Income1.csv) #数据准备data.head(5)#展示数据 #以上所有的代码都是用jupyter notebook写&#xff0c;形成了阶段性的结果展示 查看数据信息 dat…

Qt的坐标系系统 - 3个坐标系,2个变换

参考&#xff1a; https://zhuanlan.zhihu.com/p/584048811https://www.zhihu.com/tardis/zm/art/634951149?source_id1005 小谈Qt的坐标系系统 Qt中有三个坐标系 设备坐标系窗口坐标系逻辑坐标系 设备坐标系: 即Device坐标系。也是物理坐标系。即真实的的物理坐标系。 …

Ubuntu部署EMQX开源版MQTT服务器-Orange Pi部署-服务器部署

一、前言 作为全球最具扩展性的 MQTT 消息服务器&#xff0c;EMQX 提供了高效可靠海量物联网设备连接&#xff0c;能够高性能实时移动与处理消息和事件流数据&#xff0c;本文将介绍如何在Ubuntu 22.04上部署MQTT服务器。我们本次选择开源版&#xff0c;使用离线安装方式部署。…

ArcGIS pro与SuperMap根据属性自动填充颜色步骤

GIS项目经常会接触到控规CAD数据&#xff0c;想要把数据转换成GIS图层并发布&#xff0c;需要进行专题配图。研究了一下ArcGIS pro和SuperMap iDesktop的配图&#xff0c;整理一下用到的一些技术思路。 1、Excel表格根据RGB值添加单元格填充颜色 要实现如上效果图&#xff0c;…

【NR技术】NR NG-RAN整体架构 -网络接口以及无线协议框架(四)

1 引言 本博文介绍NR NG-RAN的网络节点间的接口以及无线协议框架。网络接口介绍包括RAN和NGC之间的NG接口&#xff1b;无线协议框架包括用户面和控制面协议。 2 NG接口 2.1 NG用户面接口 NG-U (user plane interface)是NG-RAN节点与UPF之间的接口。NG接口的用户平面协议栈如图…

UE4 透明物体不渲染显示??

问题描述&#xff1a;半透明特效在背景&#xff08;半透明材质模型&#xff09;前&#xff0c;当半透明特效开始移动的时候&#xff0c;随着速度的加快会逐渐不渲染&#xff01; 解决办法&#xff1a; 1.设置透明度排序 2.如果还没效果&#xff0c;修改半透明背景模型以下材质…

基于KEDA的Kubernetes自动缩放机制

KEDA以事件驱动的方式实现Kubernetes Pod的动态自动扩容机制&#xff0c;以满足不同的负载需求&#xff0c;从而提高应用可伸缩性和弹性。原文: Dynamic Scaling with Kubernetes Event-driven Autoscaling (KEDA) Kubernetes是容器编排平台的事实标准&#xff0c;已经彻底改变…

vp与相机连接

1.网线 2.相机电源线 1.相机电源线 接头 &#xff08;使用红色和黑色 线头要串联&#xff09; 1.光源连接口 2.光源控制器 开关 3.光源控制器通电接口 4.光源自动感应接口 &#xff08;一般用于自动控制光源 开关&#xff09; 1.两种不同类型的光源 1.光源亮度控制 2.切…

Leetcode—209.长度最小的子数组【中等】

2023每日刷题&#xff08;五十六&#xff09; Leetcode—209.长度最小的子数组 实现代码 class Solution { public:int minSubArrayLen(int target, vector<int>& nums) {int left 0, right 0;int ans nums.size() 1, s 0;for(; right < nums.size(); righ…

基于单片机的自动售货机(论文+源码)

1.系统设计 本设计以这样的工作流程开始自动售货机的自动售货过程&#xff1a; 启动系统&#xff0c;开始待机&#xff1b;顾客通过按键选择商品的种类以及数量并确认&#xff1b; 售货机检查是否有足够的货物并通过LCD提示等待顾客投币&#xff1b;顾客投入货币&#xff0c;…

使用yum/dnf管理软件包

本章主要介绍使用 yum 对软件包进行管理。 yum 的介绍搭建yum源创建私有仓库yum客户端的配置yum的基本使用使用第三方yum源 使用rpm安装包时经常会遇到一个问题就是包依赖&#xff0c;如下所示。 [rootrhel03 ~]# rpm -ivh /mnt/AppStream/Packages/httpd-2.4.37-41.modulee…

【漏洞复现】云时空社会化商业ERP系统gpy文件上传

漏洞描述 用友软件的先进管理理念,汇集各医药企业特色管理需求,通过规范各个流通环节从而提高企业竞争力、降低人员成本,最终实现全面服务于医药批发、零售连锁企业的信息化建设的目标,是一款全面贴合最新GSP要求的医药流通行业一站式管理系统。 时空云社会化商业ERP gpy…