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

回文链表(leetcode)

我自己第一个写的代码:

bool isPalindrome(struct ListNode* head){struct ListNode* tail = NULL;struct ListNode* pos = NULL;if( head->next == NULL){return true;}while( 1 ){if(  head->next == NULL || (head->next->next == NULL && head->val==head->next->val) ){return true;}for( tail = head ; tail->next->next != NULL ; tail = tail->next);if( head->val != tail->next->val)return false;if(  head->next == NULL || head->next->next == NULL ){return true;}pos = head;head = head->next;tail->next = NULL;pos->next = NULL;}
}

1               2                  3                 2               1 

比较第一个数和最后一个数,注意不要把指针放在最后,因为要将最后的链点删除,则考虑倒数第二个链点,并且if条件判断要放在两处,为了防止对空指针解引用

但此时时间复杂度过高O(n)  循环内的代码均要执行一遍,导致超时

算法:首先将链表分成两节,将后一节的链表翻转,在一一比较

1             2             3             3                2            1       

1            2               3   ||   3        2           1

1       2           3          ||      1           2         3

struct ListNode* rollback( struct ListNode* head )
{
    struct ListNode* pos = (struct ListNode*)malloc(sizeof(struct ListNode));
    struct ListNode* p1 = head;
    struct ListNode* p2 = head->next;
    while( p2 != NULL )
    {
        p1->next = p2->next;
        p2->next = pos->next;
        pos->next = p2;
        p2 = p1->next;
    }
    return pos->next;
}
        
struct ListNode* get_listnode(struct ListNode* head)
{
    struct ListNode* fast = head->next;
    struct ListNode* slow = head;
    struct ListNode* arr = NULL;
    while( fast != NULL && fast->next != NULL)
    {
        fast = fast->next->next;
        slow = slow->next;
    }
    arr = slow->next;
    slow->next = NULL;
    return arr;
}

bool isPalindrome(struct ListNode* head){

    struct ListNode* mid_listnode = NULL;
    struct ListNode* tail = NULL;
    if( head == NULL )
    {
        return true;
    }
    mid_listnode = get_listnode(head);
    tail = rollback(mid_listnode);
    while( tail != NULL )
    {

        if( head->val != tail->val )
        {
            return false;
        }
        tail = tail->next;
        head = head->next;
    } 这里的比较执行n/2次

    return true;
}

时间复杂度分析:rollback函数内的语句执行n/2次

                             get_listnode函数内的语句执行n/2次

                           T =   O(n)

空间复杂度:O(1)

相关文章:

回文链表(leetcode)

我自己第一个写的代码: bool isPalindrome(struct ListNode* head){struct ListNode* tail NULL;struct ListNode* pos NULL;if( head->next NULL){return true;}while( 1 ){if( head->next NULL || (head->next->next NULL && head->…...

大语言模型(LLM)技术名词表(一)

LLMs on a Phone:指在手机设备上运行的大型语言模型。 Scalable Personal AI:指用户可以在个人设备上对AI模型进行微调的技术。 Responsible Release:发布AI模型时考虑社会、法律和伦理影响的做法。 Multimodality:AI模型能处理…...

C++ 快速排序快速选择

目录 1、75. 颜色分类 2、912. 排序数组 3、 215. 数组中的第K个最大元素 4、LCR 159. 库存管理 III 1、75. 颜色分类 思路:利用快速排序思路,使用三指针分块进行优化。 [0,left]——小于key[left1,right-1]——等于key[right,nums.size()]——大于k…...

雅马哈伺服器TS-S系列说明具体详情内容可参看PDF目录内容

雅马哈伺服器TS-S系列说明具体详情内容可参看PDF目录内容...

SpringBoot底层原理

SpringBoot底层原理 一 配置优先级 1.配置方式 Springboot中支持三种配置方式,分别为: application.propertiesapplication.ymlapplication.yaml 2.配置优先级 当存在多份配置文件时,配置文件会按照它们的优先级生效。 优先级从高到底…...

【golang】25、图片操作

用 “github.com/fogleman/gg” 可以画线, 框 用 “github.com/disintegration/imaging” 可以变换颜色 一、渲染 1.1 框和字 import "github.com/fogleman/gg"func DrawRectangles(inPath string, cRects []ColorTextRect, fnImgNameChange FnImgNameChange) (st…...

kswapd0挖矿病毒攻击记录

文章目录 一、起因与病毒分析1、起因2、阿里云告警2.1 恶意脚本代码执行12.2 恶意脚本代码执行22.3恶意脚本代码执行32.4 恶意脚本代码执行4 3、病毒简单分析3.1 病毒的初始化3.2 病毒本体执行 4、总结 二、ubuntu自救指南1、病毒清理2、如何防御 一、起因与病毒分析 1、起因 …...

如何使用 takeUntil RxJS 操作符来声明性地管理订阅

简介 Angular 处理取消订阅可观察对象的操作,比如从 HTTP 服务返回的可观察对象或者使用 async 管道时。然而,对于其他情况,管理所有订阅并确保取消长期存在的订阅可能会变得困难。而且,取消大部分订阅的策略也会带来自己的问题。…...

在Centos中用Docker部署oracle-12c

一、介绍 Oracle 12c是Oracle 11g的后续版本。12c代表云计算(Cloud Computing),这是Oracle在该版本中强调的一个关键概念。它具有多租户架构、数据库内存、安全增强、大数据管理和自动化管理等功能。它被广泛应用于企业级应用程序和大型数据…...

JS进阶——高级技巧

版权声明 本文章来源于B站上的某马课程,由本人整理,仅供学习交流使用。如涉及侵权问题,请立即与本人联系,本人将积极配合删除相关内容。感谢理解和支持,本人致力于维护原创作品的权益,共同营造一个尊重知识…...

TG-ADMIN 权限管理系统

项目简介 该项目是一款基于 SpringBoot + Vue2 + Jwt + ElementUi的 RBAC模型管理系统。 主要以自定义拦截器和jwt结合进行权限验证 通过自定义指令实现按钮级别权限,使用经典的RBAC模型 什么是RBAC? 1、RBAC模型概述 RBAC模型(Role-Based Access Control:基于角色的…...

十五届蓝桥杯第三期模拟赛题单(C++、java、Python)

备战2024年蓝桥杯 省赛第三期模拟赛题单 备战Python大学A组 第一题 【问题描述】 请问 2023 有多少个约数?即有多少个正整数,使得 2023 是这个正整数的整数倍。 【问题描述】 这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果…...

嵌入式驱动学习第一周——git的使用

前言 本文主要介绍git的使用,包括介绍git,gitee,以及使用gitee创建仓库并托管代码 嵌入式驱动学习专栏将详细记录博主学习驱动的详细过程,未来预计四个月将高强度更新本专栏,喜欢的可以关注本博主并订阅本专栏&#xf…...

界面控件DevExpress .NET MAUI v23.2新版亮点 - 拥有全新的彩色主题

DevExpress拥有.NET开发需要的所有平台控件,包含600多个UI控件、报表平台、DevExpress Dashboard eXpressApp 框架、适用于 Visual Studio的CodeRush等一系列辅助工具。屡获大奖的软件开发平台DevExpress 今年第一个重要版本v23.1正式发布,该版本拥有众多…...

大语言模型LLM Pro+中Pro+(Prompting)的意义

—— Pro ,即Prompting,构造提示 1.LLM Pro中Pro(Prompting)的意义 Prompting不仅是大语言模型交互和调用的一种高效手段,而且已成为推动模型泛化能力和应用灵活性的关键技术路径,它不仅极大地拓展了模型功…...

React 中,children 属性

在 React 中,children 属性是一个特殊的属性,它允许你将组件作为其他组件的子元素传递。这意味着你可以在组件内部嵌套任何类型的子组件或元素,并且在父组件中通过 props.children 访问它们。这为组件的复用和组合提供了极大的灵活性。 以下…...

多行业万能预约门店小程序源码系统 支持多门店预约小程序 带完整的安装代码包以及搭建教程

随着消费者对于服务体验要求的不断提升,门店预约系统成为了许多行业提升服务质量、提高运营效率的重要工具。然而,市面上的预约系统往往功能单一,无法满足多行业、多场景的个性化需求。下面,小编集合了多年的行业经验和技术积累&a…...

Node.js 中 fs 模块文件操作的应用教程

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它可以让 JavaScript 代码在服务器端运行。在 Node.js 中,fs 模块是用来处理文件系统操作的模块。通过 fs 模块,我们可以进行文件的读取、写入、删除等操作。本教程将介绍如何在 No…...

一些常用到的git命令

git stash -a //缓存所有文件 git checkout -b dev origin/dev //切换到dev分支上,接着跟远程的origin地址上的dev分支关联起来 //推送本地分支到远程仓库 git push origin localbranchname:remotebrancname git revert onefile //https://www.freecodecamp.org/news/git-re…...

spring boot3解决跨域的几种方式

⛰️个人主页: 蒾酒 🔥系列专栏:《spring boot实战》 🌊山高路远,行路漫漫,终有归途。 目录 1.前言 2.何为跨域 3.跨域问题出现特征 4.方式一:使用 CrossOrigin 注解 5.方式二:自定义…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

应用升级/灾备测试时使用guarantee 闪回点迅速回退

1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...