单链表算法 - 链表的回文结构

news2024/9/21 18:39:32

链表的回文结构_牛客题霸_牛客网对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为。题目来自【牛客题霸】icon-default.png?t=N7T8https://www.nowcoder.com/practice/d281619e4b3e4a60a2cc66ea32855bfa思路1:

/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};*/
class PalindromeList {
public:
    bool chkPalindrome(ListNode* A) {
        int left = 0;
        int right = 0;
        // write code here
        //创建数组
        int count = 0;
        //创建数组
        int arr[900];
        ListNode* ptail = A;
        //将链表中的数据插入到数组里面以及计算链表的个数
        while(A)
        {
            arr[count++] = A->val;
            A = A->next;
        }
        //下标是从0开始的
        right = count-1;
        //比较是否为回文结构
        while(left++ < right--)
        {
            if(arr[left] != arr[right])
            {
                return false;
            }
        }
        return true;
    }
};

提交结果:

在代码中我们申请了900个整型的数组,因为我们知道链表最大是900个节点,这里的空间复杂度也是O(1),复合要求,那如果这里没有对链表节点个数进行限制,这种思路肯定是不行的。

除此之外,该思路只能在牛客上通过,若换成力扣,通过不了,因为如果明确规定空间复杂度为O(1)的话就不能额外的去申请空间,更别说申请900个整型了,牛客平台对时间和空间复杂度没有力扣那么严格。

思路2:

代码: 

/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};*/

//C++和C在这里唯一的区别就是不需要再typedef
//typedef struct ListNode ListNode; - 不用


class PalindromeList {
public:
ListNode* reveres(ListNode* A)
{
    ListNode* prev = NULL;
    ListNode* ptail = A;
    ListNode* next = A->next;
    while(ptail)
    {
        ptail->next = prev;
        prev = ptail;
        ptail = next;
        next = next->next;
    }
    return prev;
}
    bool chkPalindrome(ListNode* A) {
        // write code here
        //找中间节点
        ListNode* fast = A;
        ListNode* slow = A;
        while(slow && slow->next)
        {
            fast = fast->next;
            slow = slow->next->next;
        }
        //fast就是中间节点
        ListNode* right =  reveres(fast);//逆置并返回逆置后的第一个节点
        ListNode* left = A;
        while(right)
        {
            if(right->val != left->val)
            {
                return false;
            }
            right = right->next;
            left = left->next;
        }
        return true;
    }
};

提交结果:

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

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

相关文章

flask学习

flask学习 一、什么是flask Flask是一个使用 Python 编写的轻量级 Web 应用框架。其 WSGI 工具箱采用 Werkzeug &#xff0c;模板引擎则使用 Jinja2 。Flask使用 BSD 授权。Flask也被称为 “microframework” &#xff0c;因为它使用简单的核心&#xff0c;用 extension 增加…

【STM32嵌入式系统设计与开发---拓展】——1_9_1上拉输入和下拉输入

在使用GPIO引脚时&#xff0c;上拉输入和下拉输入的选择取决于外部电路的特性和应用需求。以下是它们各自的应用场景&#xff1a; 1、上拉输入&#xff08;Pull-up Input&#xff09; 用途: 当默认状态需要为高电平时。 避免引脚悬空&#xff08;floating&#xff09;导致的…

浅说区间dp(下)

文章目录 环形区间dp例题[NOI1995] 石子合并题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示思路 [NOIP2006 提高组] 能量项链题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示思路 [NOIP2001 提高组] 数的划分题目描述输入格式输出格式样例 #1样例输…

深度学习落地实战:基于GAN(生成对抗网络)生成图片

前言 大家好&#xff0c;我是机长 本专栏将持续收集整理市场上深度学习的相关项目&#xff0c;旨在为准备从事深度学习工作或相关科研活动的伙伴&#xff0c;储备、提升更多的实际开发经验&#xff0c;每个项目实例都可作为实际开发项目写入简历&#xff0c;且都附带完整的代…

【Android Studio】整合okhttp发送get和post请求(提供Gitee源码)

前言&#xff1a;本篇博客教学大家如何使用okhttp发送同步/异步get请求和同步/异步post请求&#xff0c;这边博主把代码全部亲自测试过了一遍&#xff0c;需要源码的可以在文章最后自行拉取。 目录 一、导入依赖 二、开启外网访问权限 三、发送请求 3.1、发送同步get请求…

mac如何合并pdf文件到一个文件 macpdf合并 Mac如何合并pdf文件

在数字化的今天&#xff0c;pdf文件因其跨平台、格式统一等优势&#xff0c;已经成为工作、学习和生活中不可或缺的文件格式。然而&#xff0c;当我们需要合并多个pdf文件时&#xff0c;可能会感到有些无从下手。本文将为你详细介绍几种简单实用的合并pdf的方法&#xff0c;让你…

【学习css3】使用flex和grid实现等高元素布局

过往的实现方法是使用浮动加计算布局来实现&#xff0c;当flex和grid问世时&#xff0c;这一切将变得简单起来 一、简单的两列实现 1、先看页面效果 2、css代码 .container {padding: 10px;width: 100ch;margin: 0 auto;box-shadow: inset 0 0 0 2px #ccc;}.column {margin: 2…

简单爬虫案例

准备工作&#xff1a; 1. 安装好python3 最低为3.6以上&#xff0c; 并成功运行pyhthon3 程序 2. 了解python 多进程原理 3. 了解 python HTTP 请求库 requests 的基本使用 4. 了解正则表达式的用法和python 中 re 库的基本使用 爬取目标 目标网站&#xff1a; https://…

STM32智能建筑能源管理系统教程

目录 引言环境准备智能建筑能源管理系统基础代码实现&#xff1a;实现智能建筑能源管理系统 4.1 数据采集模块 4.2 数据处理与控制模块 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景&#xff1a;能源管理与优化问题解决方案与优化收尾与总结 1. 引言 智能建筑能…

云计算数据中心(二)

目录 三、绿色节能技术&#xff08;一&#xff09;配电系统节能技术&#xff08;二&#xff09;空调系统节能技术&#xff08;三&#xff09;集装箱数据中心节能技术&#xff08;四&#xff09;数据中心节能策略和算法研究&#xff08;五&#xff09;新能源的应用&#xff08;六…

verilog刷题笔记

1、选择器实现方式 &#xff08;1&#xff09;case语句&#xff0c;注意default &#xff08;2&#xff09;if-else语言&#xff0c;注意else&#xff0c;有优先级 &#xff08;3&#xff09;三元运算符 &#xff1f; &#xff1a; 2、阻塞赋值/非阻塞赋值都是过程性赋值&a…

华为od机试真题 — 测试用例执行计划(Python)

题目描述 某个产品当前迭代周期内有N个特性&#xff08;F1, F2, ..., FN&#xff09;需要进行覆盖测试&#xff0c;每个特性都被评估了对应的优先级&#xff0c;特性使用其ID作为下标进行标识。 设计了M个测试用例&#xff08;T1, T2,...,TM&#xff09;&#xff0c;每个用例…

【JavaEE】HTTP协议(1)

&#x1f921;&#x1f921;&#x1f921;个人主页&#x1f921;&#x1f921;&#x1f921; &#x1f921;&#x1f921;&#x1f921;JavaEE专栏&#x1f921;&#x1f921;&#x1f921; &#x1f921;&#x1f921;&#x1f921;上一篇文章&#xff1a;【JavaEE】网络原理—…

入坑树莓派(2)——树莓派4B与手机蓝牙通信

入坑树莓派(2)——树莓派4B与手机蓝牙通信 1、引言 在入坑树莓派(1)中已经搞掂了可视化问题。现在继续开展下一步,尝试与手机通信,一开始是想弄wifi连接的,但发现基于wifi的APP比较难弄,为了降低开发的难度,又因为树莓派板子自带蓝牙模块,所以直接选用蓝牙连接手机…

Qt窗口程序整理汇总

到今日为止&#xff0c;通过一个个案例的实验&#xff0c;逐步熟悉了 Qt6下 窗体界面开发的&#xff0c;将走过的路&#xff0c;再次汇总整理。 Qt Splash样式的登录窗https://blog.csdn.net/castlooo/article/details/140462768 Qt实现MDI应用程序https://blog.csdn.net/cast…

昇思25天学习打卡营第16天|Vision Transformer图像分类

本节使用Vision Transfomer完成图像分类 相关知识 Vision Transformer ViT是计算机视觉和自然语言处理两个领域的融合成果。它使用transformer架构来处理图像数据&#xff0c;这种架构原本是用于处理自然语言的。 ViT的主要思想是将图像分割成固定大小的块&#xff08;patch…

kafka开启kerberos和ACL

作者&#xff1a;恩慈 一、部署kafka-KB包 1&#xff0e;上传软件包 依次点击 部署中心----部署组件----上传软件包 选择需要升级的kafka版本并点击确定 2&#xff0e;部署kafka 依次点击部署中心----部署组件----物理/虚拟机部署----选择集群----下一步 选择手动部署-…

GB28181语音对讲实现

1.前提准备 1.1.首先将设备接入SIP网关服务 我这里使用的是开源的wvp-GB28181-pro项目&#xff0c;首先将设备接入到SIP网关服务。 配置信息如下&#xff1a; 1.2.修改设备配置 设备接入后&#xff0c;会自动注册到平台&#xff0c;可以在国标设备栏看到刚刚注册的设备信息…

K8S私有云裸金属服务器负载均衡器OpenELB——筑梦之路

OpenELB介绍 OpenELB 是一个专为裸机 Kubernetes 集群设计的开源负载均衡器实现。 在云服务环境中的 Kubernetes 集群里&#xff0c;通常可以用云服务提供商提供的负载均衡服务来暴露 Service&#xff0c;但是在本地没办法这样操作。而 OpenELB 可以让用户在裸金属服务器、边缘…

模块化和包管理工具

一&#xff0c;模块化 1.定义 将一个复杂的程序文件依据一定规则&#xff08;规范&#xff09;拆分成多个文件的过程称之为 模块化 其中拆分出的 每个文件就是一个模块 &#xff0c;模块的内部数据是私有的&#xff0c;不过模块可以暴露内部数据以便其他模块使用 2.模块化…