单链表的问题(2)

news2024/11/15 11:54:21
 

1.对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。

给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。

这个我们可以运用双指针来解决这个问题 ,一个用slow,一个为fast

ListNode* tou(ListNode* head)
{
    ListNode* n1 = NULL;
    ListNode* n2 = head;
    ListNode* n3 = head->next;
    while (n2)
    {
        n2->next = n1;
        n1 = n2;
        n2 = n3;
        if (n3)
            n3 = n3->next;
    }
    return n1;
}

这里下面用到的链表的反转,如果不太清楚可以看上一篇文章。 (以上是反转的代码)

 

bool chkPalindrome(ListNode* a) {
    ListNode* slow = a;
    ListNode* fast = a;
    while (fast && fast->next)
    {
        slow = slow->next;
        fast = fast->next->next;
    }
    ListNode* head = tou(slow);
    while (head)
    {
        if (head->val != a->val)
        {
            return false;
        }
        head = head->next;
        a = a->next;
    }
    return true;

这里是有一个规律,如果是回文序列的话slow一定会走到 中间的右边的节点,就是如图的右边的3的节点,

也可以通过这个案例看到这样的情况。

这里用到的反转是将4后面的反转,形成如图所示的情况

 

这时通过反转代码,返还的是最右边1的地址,而我们还知道开头的地址,所以通过while函数来进行比较,来得到我们所需要的结果。 

2.实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。

这里我们可以先让一个指针多走k步,这样slow与fast之间差k步,这以后都是我们要找的 

例如:找倒数第三个

 

如上图所示,当fast到NULL时,slow正好是在我们所要的倒数第三个。

ListNode* slow = head;
ListNode* fast = head;
if (fast == NULL)
{
    return NULL;
}
while (k--)
{
    fast = fast->next;
}
while (fast)
{
    slow = slow->next;
    fast = fast->next;
}
return slow->val;

第一步是判断不是空链表(代码便如图所示) 

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

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

相关文章

爆改YOLOv8|利用全新的聚焦式线性注意力模块Focused Linear Attention 改进yolov8(v1)

1,本文介绍 全新的聚焦线性注意力模块(Focused Linear Attention)是一种旨在提高计算效率和准确性的注意力机制。传统的自注意力机制在处理长序列数据时通常计算复杂度较高,限制了其在大规模数据上的应用。聚焦线性注意力模块则通…

EmguCV学习笔记 C# 7.1 角点检测

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

Excel中让第一行始终显示

要在Excel中让第一行始终显示,你可以使用冻结窗格功能。具体步骤如下: 打开需要设置第一行一直显示的工作表。将光标定位在工作表内任意一个单元格内。选择“视图”菜单,单击工具栏中的“冻结窗格”命令。在弹出的下拉菜单中选择“冻结首行”…

字母的大小写转换(tolower、toupper、transform)

字母的大小写转换(tolower、toupper、transform) 1. tolower()、toupper()函数 (这个在之前的一篇文章 “字符串中需要掌握的函数总结(1)”中有较为详细的介绍。&#…

时利和:如何提升工装夹具的加工质量?

在机械加工领域,工装夹具起着至关重要的作用。它不仅能够提高生产效率,还能保证加工精度,确保产品质量的稳定性。那么,如何提升工装夹具的加工质量呢?以下是时利和整理分享的几个关键因素。 一、精准的设计 工装夹具的设计是决定…

使用物联网卡访问萤石云的常见问题

使用物联网卡接入萤石开放平台时经常遇到各种问题,这边总结了常见的一些 用的是哪家运营商的卡? 电信 移动 联通(申请的时候可以自主选择) 卡有什么限制? 定向流量卡,只能访问萤石云平台,只能…

完美解决Jenkins重启后自动杀掉衍生进程(子进程)问题

完美解决Jenkins重启后自动杀掉衍生进程(子进程)问题 本文中使用的Jenkins版本为Version 2.452.3 先罗列一下前置问题:Jenkins任务构建完成自动杀掉衍生进程 用过Jenkins的都知道,Jenkins任务构建完成后,是会自动杀掉衍生进程,这…

安卓AppBarLayout与ViewPager2里的fragment里的webview滑动冲突

今天开发遇见一个头痛的问题,就是AppBarLayout和webview会存在一个冲突问题。如图下 问题出现在webview推到顶端的时候,AppBarLayout并不会跟着响应伸缩,解决办法是 在 webview 包 一个 父的 NestedScrollView 就能解决了。 运行效果入下 更改…

单向链表和双向链表的一些基本算法

单向链表头插尾插 单向链表的销毁与反转 反转原理:将头节点与后面的节点分开,然后从第一个节点开始对每个节点使用头插法 冒泡排 选排 链表环: 判断是否有环:弗洛伊德快慢指针(快指针一般是慢指针的2倍,差为…

Selenium(HTML基础)

一、HTML基础 (在学习自动化时,保证能看懂) 1.1.HTML介绍 英文是HyperText Markup Language,译为:超文本标记语言是Internet上用于设计网页的主要语言,2008年发布了HTML5.0,是目前互联网的标准,并作为互联…

数据结构之 “单链表“

(1)在顺表表中,如果是头插/删的时间复杂度是O(1);尾插/删的时间复杂度是O(N) (2)增容一般是呈2倍的增长,势必会有一定的空间浪费。比如:申请了50个空间,只用了两个&#…

【Matlab】SSA-BP麻雀搜索算法优化BP神经网络回归预测 可预测未来(附代码)

资源下载: 资源合集: 目录 一,概述 传统的BP神经网络存在一些问题,比如容易陷入局部最优解、训练速度慢等。为了解决这些问题,我们引入了麻雀算法作为优化方法,将其与BP神经网络相结合,提出了…

精准高效,省时省力——2024年翻译工具新趋势

如果你收到一份外文文档,但是你看不懂急需翻译成中文,将文档内容复制粘贴到翻译的的窗口获得中文内容是不是很麻烦。我了解到了deepl翻译文档之后还认识了不少的翻译神器,这次分享给你一起试试吧。 第一款福晰在线翻译 链接直达>>htt…

3D工艺大师:精准助力医疗设备远程维修

医疗设备是现代医疗体系中不可或缺的重要工具,它们帮助医生更准确地诊断病情,更有效地进行治疗。但随着技术的进步,这些设备变得越来越复杂,维修起来也面临诸多挑战。 首先,医疗设备结构复杂,零件众多&…

【Material-UI】Rating组件中的Rating precision属性

文章目录 一、Rating组件概述1. 组件简介2. precision属性的作用 二、Rating precision的基本用法三、Rating precision属性详解1. 精度选择的意义2. 如何在项目中选择合适的精度 四、Rating precision属性的实际应用场景1. 电商平台中的应用2. 电影评分应用3. 专业评测网站 五…

[Tomcat源码解析]——热部署和热加载原理

热部署 在Tomcat中可以通过Host标签设置热部署,当 autoDeploy为true时,在运行中的Tomcat中丢入一个war包,那么Tomcat不需要重启就可以自动加载该war包。 <Host name="localhost" appBase="webapps"unpackWARs="true" autoDeploy="…

Ubuntu18.04 下安装CUDA

安装步骤 1.查看是否安装了cuda # 法1 cat /usr/local/cuda/version.txt # 法2 nvcc --version 2.若没有安装&#xff0c;则查看是否有N卡驱动&#xff0c;若无N卡驱动&#xff0c;则到软件与更新 -> 附加驱动中安装驱动 3.查看N卡驱动支持的cuda版本 nvidia-smi 如下…

RabbitMQ 集群与高可用性

目录 单节点与集群部署 1.1. 单节点部署 1.2. 集群部署 镜像队列 1.定义与工作原理 2. 配置镜像队列 3.应用场景 4. 优缺点 5. Java 示例 分布式部署 1. 分布式部署的主要目标 2. 典型架构设计 3. RabbitMQ 分布式部署的关键技术 4. 部署策略和实践 5. 分布式部署…

图像变换——等距变换、相似变换、仿射变换、投影变换

%%图像变换 % I imread(cameraman.tif); I imread(F:\stitching\imagess\or\baiyun2.jpg); figure; imshow(I); title(原始图像); [w,h]size(I); thetapi/4;%旋转角 t[200,80];%平移tx,ty s0.3;%缩放尺度 %% 等距变换平移变换旋转变换 H_eprojective2d([cos(theta) sin(theta…

体育风尚杂志体育风尚杂志社体育风尚编辑部2024年第8期目录

体讯 体育产业“破圈” 3-7 成都大运会获2023年度最佳体育赛事媒体设施奖 8-10 斯巴达勇士赛 2024斯巴达勇士赛深圳站漫威主题赛在深圳光明欢乐田园揭幕 11-15 篮球 CBA季后赛 深圳马可波罗挺进季后赛八强 16-24 游泳 周六福2024年全国游泳冠军赛4月深圳激…