链表题目总结 -- 迭代

news2024/11/26 4:31:37

目录

  • 一. 反转链表
    • 1. 思路简述
    • 2. 代码
    • 3. 总结
  • 二. K 个一组翻转链表
    • 1. 思路简述
    • 2. 代码
    • 3. 总结

一. 反转链表

  • 题目链接:https://leetcode.cn/problems/reverse-linked-list/

1. 思路简述

  • 三个指针进行迭代,pre指向前驱,cur是当前指针,nxt为后继指针。
  • cur.next指向pre,实现链表的反转。

2. 代码

/**
 * 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; }
 * }
 */
public ListNode reverseList(ListNode head) {
    ListNode pre, cur, nxt;
    pre = null; cur = head; nxt = head;

    while(cur != null){
    	//寻找后继节点
        nxt = cur.next;
        //反转链表
        cur.next = pre;
		//pre,cur两个指针同步向前移动
        pre = cur;
        cur = nxt;
    }
    return pre;
}

3. 总结

  • 时间复杂度:o(n)
  • 空间复杂度:o(1),比递归要省空间,递归需要栈。
  • 把循环里的步骤分块理解,会好很多。

二. K 个一组翻转链表

  • 题目链接:https://leetcode.cn/problems/reverse-nodes-in-k-group/

1. 思路简述

  • 以k值为单位,分组进行递归式反转;如果剩下的元素个数不够k个,直接将后面的链表原样输出。
  • reverse函数就是根据反转链表改来的,只不过,反转链表是[ head,null )进行反转,而这里的反转算法换成了[ a , b )进行反转,a为每一个分组的头结点。
  • for循环真的很巧妙,刚好b最后指的是要反转链表的后一个节点,时刻记得左闭右开。a相当于反转链表当中的头结点,b就相当于反转链表中的null,如下图:
    在这里插入图片描述
  • 以这个题为例,程序执行完成后的链表应该是如下这张图的样子:
    在这里插入图片描述

2. 代码

ListNode reverse(ListNode a, ListNode b) {
    ListNode pre, cur, nxt;
    pre = null; cur = a; nxt = a;
    // while 终止的条件改一下就行了
    while (cur != b) {
        nxt = cur.next;
        cur.next = pre;
        pre = cur;
        cur = nxt;
    }
    // 返回反转后的头结点
    return pre;
}

public ListNode reverseKGroup(ListNode head, int k) {
    if(head == null)
        return null;
    ListNode a, b;
    a = head; b = head;

	//这个循环真的很巧妙,刚好b最后指的是要反转链表的后一个节点,时刻记得左闭右开
    for(int i = 0; i < k; i++){
    	//如果b == null,也就是说这个分组已经不够k个,直接将它原样输出
        if(b == null){
            return head;
        }
        //否则,继续向下遍历
        b = b.next;
    }
	
    ListNode newHead = reverse(a, b);
    //这里的a是当前的头结点,也就是没有反转前本小组的头结点。
    //因为是左闭右开,所以子问题要从b开始。
    //将各个反转后的链表连在一起,看不懂就参考上面那张图
    a.next = reverseKGroup(b, k);
    return newHead;
}

3. 总结

  • hard类型的题,确实比较绕,不过拆开来看还可以。
  • 一定要注意那个区间左闭右开,不管是for循环,还是递归的里面的形参都要注意。

参考:https://labuladong.github.io/algo/di-yi-zhan-da78c/shou-ba-sh-8f30d/ru-he-k-ge-d591d/

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

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

相关文章

Python requests模块

一、requests模块简介 requests模块是一个第三方模块&#xff0c;需要在python环境中安装&#xff1a; pip install requests 该模块主要用来发送 HTTP 请求&#xff0c;requests 模块比 urllib 模块更简洁。 requests模块支持&#xff1a; 自动处理url编码自动处理post请求…

软件工程(5)--喷泉模型

前言 这是基于我所学习的软件工程课程总结的第五篇文章。 迭代是软件开发过程中普遍存在的一种内在属性。经验表明&#xff0c;软件过程各个阶段之间的迭代或一个阶段内各个工作步骤之间的迭代&#xff0c;在面向对象范型中比在结构化范型中更常见。 一般说来&#xff0c;使用…

新闻稿怎么发?影响发稿价格的因素

在当今的信息化社会&#xff0c;新闻稿是传播信息的重要手段&#xff0c;在企业、大众媒体、政府机构以及其他组织中都广泛使用新闻稿来向外界发布信息。但是&#xff0c;发布新闻稿既要求新闻稿内容准确&#xff0c;又要求要有良好的发布形式&#xff0c;这就要求发布者要懂得…

专用舆情监测服务公司,TOOM舆情监测公司排名全国

舆情监测公司是专门从互联网、传媒等渠道搜集信息&#xff0c;对与客户相关的信息进行筛选、分析和报告&#xff0c;帮助客户及时了解和掌握舆情动态&#xff0c;保障客户的声誉和利益&#xff0c;专用舆情监测服务公司&#xff0c;TOOM舆情监测公司排名全国。 一、专用舆情监…

Win10系统不需要的服务项怎么删除?

Win10系统不需要的服务项怎么删除&#xff1f;在使用电脑的时候&#xff0c;里面会有一些不需要的服务项目。比如一些我们以前安装的软件&#xff0c;卸载之后的服务项残留等等。那么如何去进行不需要的服务项删除呢&#xff1f;一起来看看具体的方法分享吧。 操作教程 1、首先…

【C++提高笔记】泛型编程与STL技术

文章目录模板的概念函数模板函数模板语法函数模板注意事项函数模板案例普通函数与函数模板的调用规则模板的局限性类模板类模板语法类模板与函数模板区别类模板中成员函数创建时机类模板对象做函数参数类模板与继承类模板成员函数类外实现类模板分文件编写类模板与友元类模板案…

从源码角度解析SpringMVC执行流程

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 SpringMVC执行流程在面试中经常会被问到&#xff0c;本篇文章通过源码的方式简单的了解一下SpringMVC执行流程。 先看流程 先看一下Sp…

基于java的一款实时聊天系统,包含服务端 + 客户端 + web端

最终效果为什么先看最终效果&#xff1f;因为此刻代码已经撸完了。更重要的是我们带着感官的目标去进行后续的分析&#xff0c;可以更好地理解。标题中提到了&#xff0c;整个工程包含三个部分&#xff1a;1、聊天服务器聊天服务器的职责一句话解释&#xff1a;负责接收所有用户…

图像去噪技术简述

随着每天拍摄的数字图像数量激增&#xff0c;对更准确、更美观的图像的需求也在增加。然而&#xff0c;现代相机拍摄的图像不可避免地会受到噪声的影响&#xff0c;从而导致视觉图像质量下降。因此&#xff0c;需要在不丢失图像特征&#xff08;边缘、角和其他尖锐结构&#xf…

基于RK3399+YOLO目标检测人工智能图像系统设计

随着 5G 通信技术的大范围普及&#xff0c;传统的目标检测系统已经不再能满足如今步入智 能化的各行各业的需求。消费者对以往依靠机器学习的传统目标检测系统提出了更高的 要求&#xff0c;相关的生产企业也开始向智能化和低功耗化过渡。其中如何将图像增强技术、目 标检测技术…

报表生成工具Stimulsoft中的电子签名和 PDF 数字签名

Stimulsoft Reports 是一款报告编写器&#xff0c;主要用于在桌面和Web上从头开始创建任何复杂的报告。可以在大多数平台上轻松实现部署&#xff0c;如ASP.NET, WinForms, .NET Core, JavaScript, WPF, Angular, Blazor, PHP, Java等&#xff0c;在你的应用程序中嵌入报告设计器…

炔基染料试剂1998119-13-3,Cyanine7 alkyne,花青素CY7炔基

试剂基团反应特点&#xff1a;Cyanine7 alkyne染料在水中的溶解度有限&#xff0c;但可以通过添加二甲基亚砜或二甲基甲酰胺在水性缓冲液中成功结合。氰基7的炔烃衍生物&#xff0c;近红外荧光团&#xff0c;Cy7的类似物。炔烃可以通过铜催化的点击化学与多种叠氮化合物共轭。C…

vue2 Object.definProperty响应式原理(面试题)

注意&#xff1a; 响应式原理和双向数据绑定原理是两回事&#xff0c;一般面试官会先问响应式原理再问双向数据绑定的原理 详细文章 1.响应式原理 核心是数据劫持和依赖收集&#xff0c;是通过数据劫持结合发布者-订阅者模式的方式来实现的。通过Object.defineProperty()为对象…

找出字符串中第一个匹配项的下标-力扣28-java

一、题目描述给你两个字符串 haystack 和 needle &#xff0c;请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标&#xff08;下标从 0 开始&#xff09;。如果 needle 不是 haystack 的一部分&#xff0c;则返回 -1 。示例 1&#xff1a;输入&#xff1a;hayst…

java ssm计算机系统在线考试平台idea

本系统主要包括以下功能模块学生、教师、班级、考试评阅、在线考试、试题内容、考试等模块&#xff0c;通过这些模块的实现能够基本满足日常计算机系统平台的操作。 本文着重阐述了计算机系统平台的分析、设计与实现&#xff0c;首先介绍开发系统和环境配置、数据库的设计&…

ASP.NET大型绩效考核评估系统源码

分享一套ASP.NET大型绩效考核评估系统源码&#xff0c;功能基本完善&#xff0c;代码完整&#xff0c;适合学习。本系统采用.Net2010开发&#xff0c;数据库基于SQL2000/2005/2008引擎开发。系统运行环境为.NET2.0IIS6.0基础环境。 源码分享学习&#xff0c;私信获取&#xff…

第40天|LeetCode139. 单词拆分、多重背包

1.题目链接&#xff1a;139. 单词拆分 题目描述&#xff1a; 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。 注意&#xff1a;不要求字典中出现的单词全部都使用&#xff0c;并且字典中的单词可以重复使用。 解法&…

SpringBoot 指标监控 Actuator

Spring Boot Actuator为 Micrometer 提供了依赖管理和自动配置&#xff0c;Micrometer是一个支持 众多监控系统 的应用程序指标接口 该功能与&#xff1a;java\jdk\bin 下的 Jconsole 功能雷同 1、pom文件中引入依赖&#xff08;使用的springboot是2.7.2&#xff09; <dep…

15- 决策回归树, 随机森林, 极限森林 (决策树优化) (算法)

1. 决策回归树: from sklearn.tree import DecisionTreeRegressor model DecisionTreeRegressor(criterionmse,max_depth3) model.fit(X,y) # X是40个点 y是一个圆 2. 随机森林 稳定预测: from sklearn.ensemble import RandomForestClassifier # model RandomForestC…

Flink相关的记录

Flink源码编译首次编译的时候&#xff0c;去除不必要的操作&#xff0c;同时install会把Flink中的module安装到本地仓库&#xff0c;这样依赖当前module的其他组件就无需去远程仓库拉取当前module&#xff0c;节省了时间。mvn clean install -T 4 -DskipTests -Dfast -Dmaven.c…