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

链表之第二回

在这里插入图片描述

欢迎来到我的:世界

该文章收入栏目:链表

希望作者的文章对你有所帮助,有不足的地方还请指正,大家一起学习交流 !


目录

  • 前言
    • 第一题:反转一个链表
    • 第二题:链表内指定区间反转
    • 第三题:判断一个链表是否为回文结构
  • 总结

前言


对于我来说这个博客是一个学习的地方,就像我的上篇文章一样,有老铁们的支持,陪伴;我很满足,这个栏目我会继续坚持下去,108回,就像我的108难一样,只要撑过磨难,一定能取到真经

--------------------------对过程全力以赴,对结果淡然处之


第一题:反转一个链表


地址:oj地址


在这里插入图片描述
解题思路:

思路:让链表翻转过来,可以先创造一个新的链表头指针指向空,然后原来的链表一个一个头插到新的指针,到时候在返回新创造的链表起始位置。按照这个思路;

我们需要创造一个新指针变量指向空:

在这里插入图片描述

然后接下来就是将原链表头插入newnode;

这里需要注意一下如果按照头插入newnode,如果指针pHead将结点插入来的话,那pHead原指向的下一个结点就丢失了,所以这里需要创造一个新的指针 next 存放pHead所指的下一个结点,这样才能找回去;
在这里插入图片描述

后面步骤依次将后续头插入;这里有一步也需要注意,记得让cur找回到next的结点,然后使next再指向cur下一个结点;

在这里插入图片描述

直到pHead为空结束,最后返回newnode;

在这里插入图片描述

代码:

struct ListNode* ReverseList(struct ListNode* head ) {// write code herestruct ListNode* newnode = NULL;struct ListNode* cur = head;//头插while (cur) {//为了cur能够找回下一个结点struct ListNode* next = cur->next;//头插cur->next = newnode;newnode = cur;//cur指针找回到下一个结点cur = next;}return newnode;
}

第二题:链表内指定区间反转


地址:oj地址


在这里插入图片描述

加强版的反转链表;

思路:
先利用cur指针指向该链表 head 的位置,依次往下找,直到遇到要反转区间的起始位置,ret指针记录住该位置 (后面链接起来的要用到);在让cur往下走,这里应该注意要用prve指针判断在原来链表是否有结点,是否有节点关系到后面链接时的方式(是head,还是prve->next)这点很重要;然后从cur现在位置开始进行头插(为了反转给区间链表)到一个新链表newnode,直到走到区间的末尾都头插入后(包括了末尾这个结点);之后就是链接的步骤,需要将head和newnode链接起来所以这里用到了prve进行判断;
具体的更详细在下面细讲:

在这里我想着重想解释一下为什么要设置prve:

在这里插入图片描述

这里来举两个测试用例

第一个:这种相当于第二种情况:

在这里插入图片描述

创造cur指针指向的是head,prve先是指向空,开始找区间起始位置,根据m值(m为2,则应该找第二个结点),每找过一个节点,将cur给到prve(这是为了判断区别出是不是从头就开始头插,在后面链接时会用来判断其链接的方式,在上面有详细解释),直到找到区间起始(如果m=1,则直接从第一个进行头插,这个时候的prve仍指向空),在这个位置设置ret,下面进行依次头插入;

在这里插入图片描述

直到区间所有头插完:

在这里插入图片描述
最后进行链接起来,让prve->next 指向newnode ,ret->next指向cur,最后返回head;
在这里插入图片描述

还有一个测试用例:

在这里插入图片描述

这就相当于的是情况1:
全部进行了反转:

在这里插入图片描述

全部头插完后,将head指向newnode,

在这里插入图片描述

代码实现:

#include <math.h>
struct ListNode* reverseBetween(struct ListNode* head, int m, int n ) {// write code hereif (head == NULL || head->next == NULL || m == n)return head;struct ListNode* cur = head;struct ListNode* newnode = NULL, * tail = NULL;newnode = (struct ListNode*)malloc(sizeof(struct ListNode));newnode->next = tail = NULL;//找到m的最后一个int count=m;struct ListNode*prev=NULL;while(count-->1){prev=cur;cur=cur->next;}struct ListNode*ret=cur;//进行头插反转int len=n-m+1;while(len--){struct ListNode*next=cur->next;cur->next=newnode->next;newnode->next=cur;cur=next;}//链接if(prev==NULL){head=newnode->next;ret->next=cur;}else {prev->next=newnode->next;ret->next=cur;}
return head;
}

第三题:判断一个链表是否为回文结构


地址:oj地址


在这里插入图片描述

  • 首先我们要知道什么是回文结构:

偶数回文:1 2 2 1
奇数回文:1 2 3 2 1

解题思路:

思路找到中间的结点,然后让中间结点后的所有节点反转,然后,返回的这个中间节点 rever 与该链表的第一个结点进行依次比较值,相等就完后走,直到指向中间的这个节点 rever 指向空;

这里会用到返回中间结点的这个函数;和反转一串链表函数(就是本篇文章的第一题);这两个我们之前已经写过了:老铁们可以去看看:返回中间结点;

在这里插入图片描述

代码:

struct ListNode* middleNode(struct ListNode* head) {// write code here//返回中间结点的地址//设置快慢指针struct ListNode* sur = head, * dst = head;//当dst指针为空或dst指向的next为空就停下while (dst && dst->next) {sur = sur->next;dst = dst->next->next;}return sur;}//反转一串链表并返回该链表的头地址struct ListNode* ReverseList(struct ListNode* head ) {// write code herestruct ListNode* newnode=NULL;struct ListNode* cur = head;while (cur) {struct ListNode* next = cur->next;//头插cur->next = newnode;newnode = cur;cur = next;}return newnode;}//实现判断是否为回文结构
bool isPail(struct ListNode* head ) {// write code herestruct ListNode* mid = middleNode(head);struct ListNode* rever = ReverseList(mid);while (rever) {if (head->val != rever->val) {return false;}rever = rever->next;head = head->next;}return true;
}

总结


对每到题,可能还是可以优化的,如果还有更好的方法的老铁,可以在评论区里面一起进行讨论哦,在后面随着小孩的知识储备越多,小孩肯定还会加以优化优化!!


到了最后:感谢支持

我还想告诉你的是:
------------对过程全力以赴,对结果淡然处之
也是对我自己讲的

相关文章:

链表之第二回

欢迎来到我的&#xff1a;世界 该文章收入栏目&#xff1a;链表 希望作者的文章对你有所帮助&#xff0c;有不足的地方还请指正&#xff0c;大家一起学习交流 ! 目录 前言第一题&#xff1a;反转一个链表第二题&#xff1a;链表内指定区间反转第三题&#xff1a;判断一个链表…...

【sgDragSize】自定义拖拽修改DIV尺寸组件,适用于窗体大小调整

核心原理就是在四条边、四个顶点加上透明的div&#xff0c;给不同方向提供按下移动鼠标监听 &#xff0c;对应计算宽度高度、坐标变化 特性&#xff1a; 支持设置拖拽的最小宽度、最小高度、最大宽度、最大高度可以双击某一条边&#xff0c;最大化对应方向的尺寸&#xff1b;再…...

Gson与FastJson详解

Gson与FastJson详解 Java与JSON 做什么? 将Java中的对象 快速的转换为 JSON格式的字符串. 将JSON格式的字符串, 转换为Java的对象. Gson 将对象转换为JSON字符串 转换JSON字符串的步骤: 引入JAR包 在需要转换JSON字符串的位置编写如下代码即可: String json new Gson().to…...

LeetCode150道面试经典题-- 有效的字母异位词(简单)

1.题目 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 注意&#xff1a;若 s 和 t 中每个字符出现的次数都相同&#xff0c;则称 s 和 t 互为字母异位词。 2.示例 s"adasd" t"daads" 返回true s"addad" t &q…...

前端与人工智能

前端开发与人工智能的结合在未来将会产生许多有趣和有前景的发展。以下是前端与人工智能结合可能带来的一些趋势和前景&#xff1a; 智能用户体验&#xff1a;人工智能可以用于改善用户体验&#xff0c;例如通过个性化推荐、情感分析等技术来提供更贴近用户需求的内容和功能。…...

神经网络基础-神经网络补充概念-14-逻辑回归中损失函数的解释

概念 逻辑回归损失函数是用来衡量逻辑回归模型预测与实际观测之间差异的函数。它的目标是找到一组模型参数&#xff0c;使得预测结果尽可能接近实际观测。 理解 在逻辑回归中&#xff0c;常用的损失函数是对数似然损失&#xff08;Log-Likelihood Loss&#xff09;&#xff…...

UG NX二次开发(C++)-PK函数创建一条圆弧曲线

文章目录 1、前言2、创建一个项目3、添加头文件4、在do_it中添加创建圆曲线的源代码5、调用dll6、再创建一个长方体验证1、前言 采用PK进行UG NX二次开发,现在看到的文章很多是直接创建实体,然后在UG NX的视图区显示出来,对于创建圆曲线的文章不多,本文讲一下PK函数创建圆…...

AndroidStudio中修改打包生成的apk名称

1.配置手机架构 splits {abi {enable truereset()include armeabi-v7a,arm64-v8auniversalApk false} } 2.多渠道 productFlavors {normal {applicationId "*****"manifestPlaceholders [appName: "string/app_name_normal"]}driver {applicationId &qu…...

多个springboot整合使用rabbitmq(使用注解的方式)

一、简述 先参考单个springboot使用rabbitmq和了解rabbitmq的五种模式 单个springboot整合rabbitmq_java-zh的博客-CSDN博客 二、创建项目 1、先创建两个springboot项目&#xff0c;一个做生产者&#xff0c;一个做消费者 2、导包(生产者和消费者对应的内容都是一样) <…...

《Effective C++中文版,第三版》读书笔记2

条款06&#xff1a;若不想使用编译器自动生成的函数&#xff0c;就该明确拒绝 为驳回编译器自动&#xff08;&#xff09;提供的机能&#xff0c;可将相应的成员函数声明为私有的&#xff0c;同时不实现它。 #include <iostream>class MyClass { public:MyClass(int in…...

虫情测报系统的工作原理及功能优势

KH-CQPest虫情测报系统能够在不对虫体造成任何破坏的情况下&#xff0c;无公害的杀死虫子&#xff0c;利用高倍显微镜和高清摄像头拍摄虫体照片&#xff0c;并将虫体照片发送到远端平台&#xff0c;让工作人员无需要到现场&#xff0c;通过平台就可以观察害虫的种类和数量&…...

UWB定位技术详细介绍

UWB&#xff08;Ultra-Wideband&#xff09;定位技术是一种通过利用信号的超宽频带特性进行高精度定位的技术。其原理是通过测量信号在空间传播中的时间延迟差异来计算物体的位置。 UWB技术与传统无线通信技术不同&#xff0c;它利用非常宽的频带进行通信&#xff0c;通常超过…...

PiplineADC学习一:

PiplineADC结构&#xff1a; PiplineADC起源之FlashADC PiplineADC起源之Sub-Ranging-ADC 比较器存在失调&#xff1a; 因此每级1bit不实用&#xff0c;需要做冗余位设计。 多比较一次&#xff0c;两个阈值&#xff0c;三个区间&#xff0c;分别对于输出00,01,10。正常2bit应该…...

Linux elasticsearch设置为开机自启动服务

Linux elasticsearch怎么设置为设置为开机自启动服务 1、进入/etc/init.d目录 cd /etc/init.d 2、新建文件elasticsearch&#xff0c;注意&#xff0c;没有扩展名 vi elasticsearch 3、新建文件elasticsearch的内容如下 说明&#xff1a; &#xff08;1&#xff09;“su…...

WinForm内嵌Unity3D

Unity3D可以C#脚本进行开&#xff0c;使用vstu2013.msi插件&#xff0c;可以实现在VS2013中的调试。在开发完成后&#xff0c;由于项目需要&#xff0c;需要将Unity3D嵌入到WinForm中。WinForm中的UnityWebPlayer Control可以载入Unity3D。先看效果图。 一、为了能够动态设置ax…...

关于vue中v-for绑定数据重新渲染的问题

我修改被v-for绑定的数据&#xff0c;发现居然不能重新渲染。 查找后得知一下方法: $set 是 Vue 提供的一个全局方法&#xff0c;用于向响应式对象中添加或更新属性&#xff0c;并触发视图更新。它接受三个参数&#xff1a;对象、要添加/更新的属性名或索引&#xff0c;以及新…...

全面解析 Axios 请求库的基本使用方法

Axios 是一个流行的基于 Promise 的 HTTP 请求库&#xff0c;用于在浏览器和 Node.js 中进行 HTTP 请求。它提供了简单易用的 API&#xff0c;可以发送各种类型的请求&#xff08;如 GET、POST、PUT、DELETE等&#xff09;&#xff0c;并处理响应数据&#xff0c;Axios 在前端工…...

rust踩雷笔记3——生命周期的理解

目录 概念和基本使用一个例子彻底理解最基本的内容 一个例子理解函数签名为什么要有生命周期标注⭐️能不能对编译器蒙混过关&#xff1f; 生命周期是rust中最难的概念——鲁迅 这一块内容即便是看rust圣经&#xff0c;第一遍也有点懵。今天早上二刷突然有了更直观的认识&…...

windows权限维持—黄金白银票据隐藏用户远控RustDeskGotoHttp

windows权限维持—黄金白银票据&隐藏用户&远控&RustDesk&GotoHttp 1. 前置1.1. 初始问题1.1.1. 解决办法 2. 隐藏用户2.1. 工具原理2.2. 案例操作2.2.1. 单机添加用户2.2.1.1. 工具添加用户2.2.1.2. 工具查看隐藏用户2.2.1.3. 本地查看隐藏用户 2.2.2. 域内添加…...

vscode conda activate激活环境出错

vscode conda activate 出错 conda-script.py: error: argument COMMAND: invalid choice: ‘activate’ To initialize your shell, run$ conda init <SHELL_NAME>Currently supported shells are:- bash- fish- tcsh- xonsh- zsh- powershellSee conda init --help f…...

跨域突围与全栈架构演进:从Vite本地代理到Nginx部署+Next.js BFF层实战

摘要&#xff1a;前面10篇博客&#xff0c;我们从SPA架构、React核心Hook、TS类型系统、组件化封装、性能优化&#xff0c;一步步吃透了中后台系统的前端开发全流程&#xff0c;完成了从前端入门到熟练开发的进阶。但想要从“只会写页面的码农”&#xff0c;升级为“懂架构、懂…...

AntiDupl.NET:数字资产管理师的智能图片去重解决方案

AntiDupl.NET&#xff1a;数字资产管理师的智能图片去重解决方案 【免费下载链接】AntiDupl A program to search similar and defect pictures on the disk 项目地址: https://gitcode.com/gh_mirrors/an/AntiDupl 在当今视觉内容爆炸的时代&#xff0c;无论是专业摄影…...

老设备焕新:OCLP更新系统全解析

老设备焕新&#xff1a;OCLP更新系统全解析 【免费下载链接】OpenCore-Legacy-Patcher 体验与之前一样的macOS 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 随着苹果对旧款Mac设备的系统支持逐渐终止&#xff0c;许多仍能正常工作的老设…...

SeqGPT-560M中文理解深度测评:对古汉语、方言、行业黑话的泛化能力分析

SeqGPT-560M中文理解深度测评&#xff1a;对古汉语、方言、行业黑话的泛化能力分析 1. 模型背景与核心能力 SeqGPT-560M是阿里达摩院推出的零样本文本理解模型&#xff0c;专门针对中文场景优化&#xff0c;无需训练即可完成文本分类和信息抽取任务。这个560M参数的轻量级模型…...

OpenClaw沙盒体验:不装本地环境玩转GLM-4.7-Flash

OpenClaw沙盒体验&#xff1a;不装本地环境玩转GLM-4.7-Flash 1. 为什么选择沙盒体验&#xff1f; 作为一个长期关注AI自动化工具的技术爱好者&#xff0c;我一直在寻找一个既能快速验证想法又不会污染本地开发环境的方式。OpenClaw的本地部署虽然强大&#xff0c;但配置过程…...

效率提升秘籍:用快马平台一键生成21届智能车优化算法模块

提升21届智能车开发效率的实战经验分享 最近在准备21届智能车比赛时&#xff0c;我发现传统开发方式存在不少效率瓶颈。从底层驱动到算法框架&#xff0c;每个环节都需要大量时间调试&#xff0c;而比赛周期又非常紧张。经过反复摸索&#xff0c;我总结出一套能显著提升开发效…...

华为光猫配置解密工具技术架构解析与实现机制

华为光猫配置解密工具技术架构解析与实现机制 【免费下载链接】HuaWei-Optical-Network-Terminal-Decoder 项目地址: https://gitcode.com/gh_mirrors/hu/HuaWei-Optical-Network-Terminal-Decoder 在网络设备运维领域&#xff0c;华为光猫配置文件的安全加密机制为设备…...

PHP 数组 vs SPL 数据结构:队列与栈场景下的性能对决

PHP 数组 vs SPL 数据结构&#xff1a;队列与栈场景下的性能对决在 PHP 开发中&#xff0c;我们常常面临一个经典的选择&#xff1a;是使用灵活的原生数组&#xff08;Array&#xff09;模拟队列/栈&#xff0c;还是使用标准库&#xff08;SPL&#xff09;提供的 SplQueue 和 S…...

SEO_2024年最新SEO策略与趋势深度解析(352 )

<h2>2024年最新SEO策略与趋势深度解析</h2> <p>在数字化时代&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;依然是网站流量和品牌影响力的核心驱动力。2024年&#xff0c;随着互联网技术的不断进步&#xff0c;SEO策略和趋势也在不断演变。本文将详细…...

all-MiniLM-L6-v2保姆级教程:Ollama模型卸载、版本回滚与缓存清理指南

all-MiniLM-L6-v2保姆级教程&#xff1a;Ollama模型卸载、版本回滚与缓存清理指南 1. 为什么需要管理你的Ollama模型&#xff1f; 你可能已经用Ollama成功部署了all-MiniLM-L6-v2&#xff0c;体验了它轻量高效的句子嵌入能力。但用久了你会发现&#xff0c;硬盘空间在悄悄减少&…...