当前位置: 首页 > news >正文

【基础算法】单链表的OJ练习(1) # 反转链表 # 合并两个有序链表 #

文章目录

  • 前言
  • 反转链表
  • 合并两个有序链表
  • 写在最后

前言

  • 上一章讲解了单链表 -> 传送门 <- ,后面几章就对单链表进行一些简单的题目练习,目的是为了更好的理解单链表的实现以及加深对某些函数接口的熟练度。

  • 本章带来了两个题目。一是反转链表,二是合并两个有序链表,整体难度不大,但要理清解题思路。

反转链表

题目链接 -> 传送门 <-

  • 该题目的意思是将一个单链表反转过来,单链表的尾节点变成新的头节点,头节点变成新的尾节点:

在这里插入图片描述

  • 题目描述是,给你一个单链表的头节点 head ,请你反转链表,并返回反转后的链表。

  • 返回反转后的链表也就是返回反转后的链表的头节点。

思路一:

  • 创建一个新的链表,取原链表的元素依次头插即可,最后返回这个新的链表的头节点。

在这里插入图片描述

思路二:

  • 直接修改原链表,返回原链表的尾节点(反转后的头节点)即可。

  • 定义三个指针遍历原链表,三个指针 (prev,cur,tail) prev开始指向NULL,cur指向头节点,tail指向cur 的下一个节点(为了找到下一个)。具体操作就是cur->next = prev(将指针改变指向),然后prev = cur,cur = tailtail = cur->next(该语句在循环的开头)。这样又是三个指针指向不同的节点,然后再将cur的指针指向前一个prev,整个过程其实就是一个循环。

  • 循环的条件是cur不为NULL就继续,当cur为空,也就是最后一步cur = tail,此时cur,tail都为空,而prev刚好指向原链表的最后一个节点,所以最后返回prev就可以了。

在这里插入图片描述

这里采用思路二进行代码实现:

struct ListNode* reverseList(struct ListNode* head){struct ListNode* cur = head;struct ListNode* prev =  NULL;while (cur){struct ListNode* tail = cur->next;cur->next = prev;prev = cur;cur = tail;}return prev;
}

合并两个有序链表

题目链接 -> 传送门 <-

  • 题目描述:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

在这里插入图片描述

  • 该题与归并排序的排序思路差不多。本题需要创建一个新链表。之后采用双指针分别遍历上下两个链表,那个节点的数据较小,就在新的链表中尾插该节点,然后指向该节点的指针向后移动一位。整体来说就是一个循环,循环结束的条件就是两个指针都指向了NULL或者其中一个指针指向了NULL

  • 注意,我们这里的新链表是不带哨兵位的,当然带哨兵位可能更加方便,最后需要返回哨兵位的下一个节点的指针。

  • 如果循环结束后,有一个指针没有指向NULL,那么在后面还需要将剩余的节点依次尾插,直到两个指针都为NULL合并成功。

在这里插入图片描述

代码实现:

struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) {struct ListNode* l1 = list1, * l2 = list2;  // 两个指针分别指向两个链表的头struct ListNode* head = NULL, * cur = NULL;  // 新链表的头和进行操作的指针curwhile (l1 && l2)   // 有一个指向空就结束{if (l1->val < l2->val)  // 比较数据值{if (!head) head = cur = l1;   // 这个if是如果新链表为空,就将该节点作为头节点else cur->next = l1, cur = cur->next;l1 = l1->next;}else{if (!head) head = cur = l2;else cur->next = l2, cur = cur->next;l2 = l2->next;}}// 如果l1不为空说明l1还有节点没有尾插完,需继续尾插while (l1){if (!head) head = cur = l1;else cur->next = l1, cur = cur->next;l1 = l1->next;}// 如果l2不为空说明l2还有节点没有尾插完,需继续尾插while (l2){if (!head) head = cur = l2;else cur->next = l2, cur = cur->next;l2 = l2->next;}// 最后返回新链表的头节点return head;
}

写在最后

对于单链表的题目练习,最重要的是思路,我们在数据结构阶段要养成画图的习惯,因为它能帮助我们更好的理解。后续还会有单链表相关的题目练习。

感谢阅读本小白的博客,错误的地方请严厉指出噢!

相关文章:

【基础算法】单链表的OJ练习(1) # 反转链表 # 合并两个有序链表 #

文章目录前言反转链表合并两个有序链表写在最后前言 上一章讲解了单链表 -> 传送门 <- &#xff0c;后面几章就对单链表进行一些简单的题目练习&#xff0c;目的是为了更好的理解单链表的实现以及加深对某些函数接口的熟练度。 本章带来了两个题目。一是反转链表&#x…...

离散数学笔记(1)命题逻辑

文章目录1.命题符号化及联结词基本概念本节题型2.命题公式及分类基本概念本节题型1.命题符号化及联结词 基本概念 命题的定义&#xff1a;能够判断真假的陈述句称为命题。 备注&#xff1a;感叹句、疑问句、祈使句和类似于xy>5之类真值不唯一的句子都不是命题。 真值的真假…...

IDEA Android 网格布局(GridLayout)示例(计算器界面布局)

网格布局(GridLayout&#xff09; 示例程序效果&#xff08;实现类似vivo手机自带计算器UI&#xff09; 真机和模拟器运行效果&#xff1a; 简述&#xff1a; GridLayout(网格布局)和TableLayout&#xff08;表格布局&#xff09;有类似的地方&#xff0c;通俗来讲可以理解为…...

【蓝桥杯嵌入式】拓展板之数码管显示

文章目录硬件电路连接方式函数实现文章福利硬件电路 通过上述原理图&#xff0c;可知拓展板上的数码管是一个共阴数码管&#xff0c;也就是说某段数码管接上高电平时&#xff0c;就会点亮。   上述原理图还给出一个提示&#xff0c;即&#xff1a;三个数码管分别与三个74HC59…...

Web Spider案例 网洛克 第三题 AAEncode加密 练习(七)

声明 此次案例只为学习交流使用&#xff0c;抓包内容、敏感网址、数据接口均已做脱敏处理&#xff0c;切勿用于其他非法用途&#xff1b; 文章目录声明一、资源推荐二、逆向目标三、抓包分析 & 下断分析逆向3.1 抓包分析3.2 下断分析逆向拿到混淆JS代码3.3 AAEncode解决方…...

【javaScript面试题】2023前端最新版javaScript模块,高频24问

&#x1f973;博 主&#xff1a;初映CY的前说(前端领域) &#x1f31e;个人信条&#xff1a;想要变成得到&#xff0c;中间还有做到&#xff01; &#x1f918;本文核心&#xff1a;博主收集的关于javaScript的面试题 目录 一、2023javaScript面试题精选 1.js的数据类型…...

Hadoop集群启动从节点没有DataNode

一、问题背景 之前启动hadoop集群的时候都没有问题&#xff0c;今天启动hadoop集群的时候&#xff0c;从节点的DataNode没有启动起来。 二、解决思路 遇见节点起不来的情况&#xff0c;可以去看看当前节点的日志文件 我进入当前从节点的hadoop安装目录的Logs文件下去查看日…...

FIFO IP Core

FIFO IP Core 先进先出的缓存器常常被用于数据的缓存&#xff0c;或者高速异步数据交互&#xff08;跨时钟信号传递&#xff09;和RAM和ROM的区别是没有地址线&#xff0c;无法指定地址 写时钟(Write Clock Domain)&#xff0c;读时钟写复位&#xff08;wr_rst)&#xff0c;读…...

从FPGA说起的深度学习(四)

这是新的系列教程&#xff0c;在本教程中&#xff0c;我们将介绍使用 FPGA 实现深度学习的技术&#xff0c;深度学习是近年来人工智能领域的热门话题。在本教程中&#xff0c;旨在加深对深度学习和 FPGA 的理解。用 C/C 编写深度学习推理代码高级综合 (HLS) 将 C/C 代码转换为硬…...

pytorch入门7--自动求导和神经网络

深度学习网上自学学了10多天了&#xff0c;看了很多大神的课总是很快被劝退。终于&#xff0c;遇到了一位对小白友好的刘二大人&#xff0c;先附上链接&#xff0c;需要者自取&#xff1a;https://b23.tv/RHlDxbc。 下面是课程笔记。 一、自动求导 举例说明自动求导。 torch中的…...

QT 之wayland 事件处理分析基于qt5wayland5.14.2

1. Qt wayland 初始化 接收鼠标/案件&#xff0c;触摸屏等事件事件 QWaylandNativeInterface : public QPlatformNativeInterface 在QWaylandNativeInterface 继承qpa 接口类QPlatformNativeInterface; 1.1 初始化鼠标&#xff1a; void *QWaylandNativeInterface::nativeR…...

【this 和 super 的区别】

在 Java 中&#xff0c;this 和 super 都是关键字&#xff0c;表示当前对象和父类对象。 this 关键字可以用于以下几种情况&#xff1a; 引用当前对象的成员变量&#xff0c;方法和构造方法&#xff0c;用于区分局部变量和成员变量重名的情况&#xff1b; 调用当前类的另外一…...

K8s:Monokle Desktop 一个集Yaml资源编写、项目管理、集群管理的 K8s IDE

写在前面 Monokle Desktop 是 kubeshop 推出的一个开源的 K8s IDE相关项目还有 Monokle CLI 和 Monokle Cloud相比其他的工具&#xff0c;Monokle Desktop 功能较全面&#xff0c;涉及 k8s 管理的整个生命周期博文内容&#xff1a;Monokle Desktop 下载安装&#xff0c;项目管理…...

自动化测试实战篇(8),jmeter并发测试登录接口,模拟从100到1000个用户同时登录测试服务器压力

首先进行使用jmeter进行并发测试之前就需要搞清楚线程和进程的区别还需要理解什么是并发、高并发、并行。还需要理解高并发中的以及老生常谈的&#xff0c;TCP三次握手协议和TCP四次握手协议**TCP三次握手协议指&#xff1a;****TCP四次挥手协议&#xff1a;**进入Jmeter&#…...

ATTCK v12版本战术实战研究—持久化(二)

一、前言前几期文章中&#xff0c;我们介绍了ATT&CK中侦察、资源开发、初始访问、执行战术、持久化战术的知识。那么从前文中介绍的相关持久化子技术来开展测试&#xff0c;进行更深一步的分析。本文主要内容是介绍攻击者在运用持久化子技术时&#xff0c;在相关的资产服务…...

python函数式编程

1 callable内建函数判断一个名字是否为一个可调用函数 >>> import math >>> x 1 >>> y math.sqrt >>> callable(x) False >>> callable(y) True 2 记录函数&#xff08;文档字符串&#xff09; >>> def square(x): …...

3.linux下安装mysql

1.安装前的环境准备 查看是否安装过mysql 首先检测Linux操作系统中是否安装了MySQL&#xff1a; # rpm -qa | grep -i mysql 卸载安装包 如果有信息出现&#xff0c;则进行删除&#xff0c;命令如下&#xff1a; # rpm -e --nodeps 包名 删除老版本mysql的开发头文件和…...

17、MySQL分库分表,原理实战

MySQL分库分表,原理实战 1.MyCAT分布式架构入门及双主架构1.1 主从架构1.2 MyCAT安装1.3 启动和连接1.4 配置文件介绍2.MyCAT读写分离架构2.1 架构说明2.2 创建用户2.3 schema.xml2.4 连接说明2.5 读写测试2.6 当前是单节点3.MyCAT高可用读写分离架构3.1 架构说明3.3 schema.xm…...

【C++的OpenCV】第九课-OpenCV图像常用操作(六):图像形态学-阈值的概念、功能及操作(threshold()函数))

目录一、阈值&#xff08;thresh&#xff09;的概念二、阈值在图形学中的用途三、阈值的作用和操作3.1 在OpenCV中可以进行的阈值操作3.2 操作实例3.2.1 threshold()函数介绍3.2.2 实例3.2.3 结果上节课的内容&#xff08;作者还是鼓励各位同学按照顺序进行学习哦&#xff09;&…...

[Java代码审计]—MCMS

环境搭建 MCMS 5.2.4&#xff1a;https://gitee.com/mingSoft/MCMS/tree/5.2.4/利用 idea 打开项目 创建数据库 mcms&#xff0c;导入 doc/mcms-5.2.8.sql 修改 src/main/resources/application-dev.yml 中关于数据库设置参数 启动项目登录后台 http://localhost:8080/ms/l…...

《程序员面试金典(第6版)》面试题 01.08. 零矩阵

题目描述 编写代码&#xff0c;移除未排序链表中的重复节点。保留最开始出现的节点。 示例1: 输入&#xff1a;[1, 2, 3, 3, 2, 1] 输出&#xff1a;[1, 2, 3] -示例2: 输入&#xff1a;[1, 1, 1, 1, 2] 输出&#xff1a;[1, 2] 提示&#xff1a; 链表长度在[0, 20000]范…...

初识 Python

文章目录简介用途解释器命令行模式交互模式输入和输出简介 高级编程语言&#xff0c;解释型语言代码在执行时会逐行翻译成 CPU 能理解的机器码代码精简&#xff0c;但运行速度慢基础代码库丰富&#xff0c;还有大量第三方库代码不能加密 用途 网络应用工具软件包装其他语言开…...

常用sql语句分享

SELECT COUNT(DISTINCT money) FROM ac_association_course;#COUNT() 函数返回匹配指定条件的行数SELECT AVG(money) FROM ac_association_course;#AVG 函数返回数值列的平均值。NULL 值不包括在计算中SELECT id FROM ac_association_course order by id desc limit 1;#返回最大…...

极狐GitLab DevSecOps 为企业许可证安全合规保驾护航

本文来自&#xff1a; 小马哥 极狐(GitLab) 技术布道师 开源许可证是开源软件的法律武器&#xff0c;是第三方正确使用开源软件的安全合规依据。 根据 Linux 发布的 SBOM 报告显示&#xff0c;98% 的企业都在使用开源软件&#xff08;中文版报告详情&#xff09;。随着开源使用…...

后端程序员的前端基础-前端三剑客之HTML

文章目录1 HTML简介1.1 什么是HTML1.2 HTML能做什么1.3 HTML书写规范2 HTML基本标签2.1 结构标签2.2 排版标签2.3 块标签2.4 基本文字标签2.5 文本格式化标签2.6 标题标签2.7 列表标签(清单标签)2.8 图片标签2.9 链接标签2.10 表格标签3 HTML表单标签3.1 form元素常用属性3.2 i…...

VS2019加载解决方案时不能自动打开之前的文档(回忆消失)

✏️作者&#xff1a;枫霜剑客 &#x1f4cb;系列专栏&#xff1a;C实战宝典 &#x1f332;上一篇: 错误error c3861 :“_T“:找不到标识符 逐梦编程&#xff0c;让中华屹立世界之巅。 简单的事情重复做,重复的事情用心做,用心的事情坚持做&#xff1b; 文章目录前言一、问题描…...

ConcurrentHashMap-Java八股面试(五)

系列文章目录 第一章 ArrayList-Java八股面试(一) 第二章 HashMap-Java八股面试(二) 第三章 单例模式-Java八股面试(三) 第四章 线程池和Volatile关键字-Java八股面试(四) 提示&#xff1a;动态每日更新算法题&#xff0c;想要学习的可以关注一下 文章目录系列文章目录一、…...

互联网衰退期,测试工程师35岁的路该怎么走...

国内的互联网行业发展较快&#xff0c;所以造成了技术研发类员工工作强度比较大&#xff0c;同时技术的快速更新又需要员工不断的学习新的技术。因此淘汰率也比较高&#xff0c;超过35岁的基层研发类员工&#xff0c;往往因为家庭原因、身体原因&#xff0c;比较难以跟得上工作…...

Windows Cannot Initialize Data Bindings 问题的解决方法

前言 拿到一个调试程序, 怎么折腾都打不开, 在客户那边, 尝试了几个系统版本, 发现Windows 10 21H2 版本可以正常运行。 尝试 系统篇 系统结果公司电脑 Windows 8有问题…下载安装 Windows10 22H2问题依旧下载安装 Windows10 21H2问题依旧家里的 笔记本Window 11正常 网上…...

Leetcode每日一题 1487. 保证文件名唯一

Halo&#xff0c;这里是Ppeua。平时主要更新C语言&#xff0c;C&#xff0c;数据结构算法......感兴趣就关注我吧&#xff01;你定不会失望。 &#x1f308;个人主页&#xff1a;主页链接 &#x1f308;算法专栏&#xff1a;专栏链接 我会一直往里填充内容哒&#xff01; &…...

企业品牌网站建设注意事项/最新黑帽seo教程

在上一篇中&#xff0c;我们基本已经把整个框架都搭建出来了&#xff0c;下面进行代码重构一下。 思路&#xff1a; 导航按钮&#xff0c;按下时&#xff0c;会变灰&#xff0c;那是系统自带了&#xff0c;通过自定义UIButton,实现按下按钮立即切换效果。MJTabBarController管得…...

个人网站有商业内容备案/微博推广有用吗

整编&#xff1a;Snow、UNA如今&#xff0c;在市场经济高度发达的当下&#xff0c;趋势与环境也更迭得越来越快&#xff0c;整个社会的消费观念、品味、需求也都处在不断变迁当中。而在新消费时代下&#xff0c;年轻消费群体重新定义市场&#xff0c;不管是传统消费人群心态与品…...

重庆 新闻发布会/网站推广seo方法

Keras是一个高级神经网络的API&#xff0c;用python编写&#xff0c;能够在TensorFlow、CNTK或Theano上运行。Keras is a high-level neural networks API, written in Python and capable of running on top of TensorFlow, CNTK, or Theano. 它的开发重点是实现快速实验。It …...

网站开发人员 组织架构/百度收录关键词查询

TML 表格 表格由 <table> 标签来定义。 每个表格均有若干行(由 <tr> 标签定义)&#xff0c;每行被分割为若干单元格(由 <td> 标签定义)。 字母 td 指表格数据(table data)&#xff0c;即数据单元格的内容。数据单元格可以包含文本、图片、列表、段落、表单、…...

阳曲网站建设推荐咨询/免费的seo网站

原文链接&#xff1a;http://blog.csdn.net/only_wan/article/details/52975760 mvn 创建时在generating project in interactive mode卡住了&#xff0c;怎么解决&#xff1f; 从图中可以看出&#xff0c;为啥卡在generating project in interactive mode&#xff0c; 因为请求…...

使用循环视频做背景的网站/seo网络推广课程

参考&#xff1a;List of HTTP header fields 翻译 标准要求字段 字段名说明例子状态A-IM可接受实例操作的请求A-IM: feed永久的Accept对于响应来说是(/是)可接受的媒体类型。看到内容协商。Accept: text/html永久的Accept-Charset可接受的字符集。Accept-Charset: utf-8永久的…...