【题解】 判断一个链表是否为回文结构
判断一个链表是否为回文结构
题目链接:判断一个链表是否为回文结构
解题思路1:借助数组
遍历链表将值都放在数组中,再遍历数组元素,判断该数组是否为一个回文结构
代码如下:
bool isPail(ListNode* head) {ListNode* cur = head;vector<int> v;while(cur != nullptr){v.push_back(cur->val);cur = cur->next;}for(int i=0,j=v.size()-1; i<j; ++i,--j){if(v[i] != v[j]){return false;}}return true;}
解题思路2:反转部分链表进行对比
注意不能反转全部的链表,否则链表整个结构都改变了,再想和初始的链表进行对比的时候,发现最初的链表已经找不到了,原来的head的next为空了,原来的结构不复存在,所以强调反转部分链表
首先遍历链表,统计链表的长度
将长度除以2,从头节点开始走这么多的位置,找到中间位置
从中间位置开始,对链表进行反转
用双指针一个从头,一个从反转的部分链表的头开始依次比较对应位置的元素值是否相等
代码如下:
ListNode* reverse(ListNode* head){ListNode* res = nullptr;ListNode* pre = nullptr;ListNode* cur = head;while(cur != nullptr){ListNode* temp = cur->next;if(cur->next == nullptr) res = cur;cur->next = pre;pre = cur;cur = temp;}return res;}bool isPail(ListNode* head) {ListNode* p = head;int n = 0;while(p != nullptr){p = p->next;n++;}n = n / 2;p = head;while(n > 0){p = p->next;n--;}p = reverse(p);ListNode* q = head;while(p != nullptr){if(p->val != q->val) return false;p = p->next;q = q->next;}return true;}
解题思路3:利用快慢指针找中点
慢指针每次走一个节点,快指针每次走两个节点,快指针到达链表尾的时候,慢指针刚好走到了链表中点
从中点的位置 ,开始将后半段链表反转
左右双指针,左指针从链表头开始往后遍历,右指针从链表尾往反转后的链表遍历,依次比较遇到的值
代码如下:
ListNode* reverse(ListNode* head){ListNode* res = nullptr;ListNode* pre = nullptr;ListNode* cur = head;while(cur != nullptr){ListNode* temp = cur->next;if(cur->next == nullptr) res = cur;cur->next = pre;pre = cur;cur = temp;}return res;}bool isPail(ListNode* head) {ListNode* slow = head;ListNode* fast = head;//双指针找中点while(fast != nullptr && fast->next != nullptr){slow = slow->next;fast = fast->next->next;}//中点处反转slow = reverse(slow);fast = head;while(slow != nullptr){if(slow->val != fast->val) return false;fast = fast->next;slow = slow->next;} return true;}
解题思路4:栈逆序
将元素放到栈中,再依次取出栈顶元素和链表进行对比,如果都相同,那该链表就是回文链表
bool isPail(ListNode* head) {stack<int> st;ListNode* cur = head;while(cur != nullptr){st.push(cur->val);cur = cur->next;}cur = head;while(!st.empty()){if(cur->val != st.top()) return false;st.pop();cur = cur->next;}return true;}
相关文章:
【题解】 判断一个链表是否为回文结构
判断一个链表是否为回文结构 题目链接:判断一个链表是否为回文结构 解题思路1:借助数组 遍历链表将值都放在数组中,再遍历数组元素,判断该数组是否为一个回文结构 代码如下: bool isPail(ListNode* head) {ListNod…...
Microsoft Message Queuing Denial-of-Service Vulnerability
近期官方公布了一个MSMQ的拒绝服务漏洞,可能因为网络安全设备的更新,影响业务,值得大家关注。 漏洞具体描述参见如下: Name: Microsoft Message Queuing Denial-of-Service Vulnerability Description: Microsoft Message Queuing…...
软件设计师(五)软件工程基础知识
一、软件工程概述 软件开发和维护过程中所遇到的各种问题称为“软件危机”。 软件工程是指应用计算机科学、数学及管理科学等原理,以工程化的原则和方法来解决软件问题的工程,其目的是提高软件生产率、提高软件质量、降低软件成本。 #mermaid-svg-h3j6K…...
Java中的JUnit单元测试方法的使用
Java中的JUnit单元测试方法 使用步骤如下: 选中当前工程 - 右键选择:build path - add libraries - JUnit 4 - 下一步创建Java类,进行单元测试。 此时的Java类要求:① 此类是public的 ②此类提供公共的无参的构造器此类中声明单…...
一文学透设计模式——抽象工厂模式
创建者模式 抽象工厂模式 概念 抽象工厂模式是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这是很多地方对于抽象工厂模式的描述,说实话感觉不是特别好懂。…...
Vue3与Vue2区别和总结(1)
在2020年9月18日,Vue.js发布3.0版本,代号:One Piece(海贼王) 既然vue2已经存在了六七年之久为什么还要研发vue3呢? 那就不得不提vue3带来的提升了 1.Vue3带来了什么 1.性能的提升 打包大小减少41% 初次…...
【华秋推荐】物联网入门学习模块 ESP8266
随着全球信息技术的不断进步和普及,物联网成为当今备受关注的技术热点之一。通过物理和数字设备之间的连接来实现自动化和互联互通的网络。无线传感器、云计算和大数据分析等技术,物联网使设备能够相互交流和共享信息,实现智能化的自动化操作…...
本科专科毕业论文如何选题-附1000多论文题目-论文选题--【毕业论文】
文章目录 本系列校训毕设的技术铺垫论文选题选题目的和意义:选题举例参考文献 配套资源 本系列校训 互相伤害互相卷,玩命学习要你管,天生我才必有用,我命由我不由天! 毕业论文不怕难,毕业设计来铺垫&#…...
pip安装jupyter notebook
之前电脑安装了anaconda,里面安装了jupyter notebook,用来做PPT之类的展示总让我觉得有点“炫酷”。 现在换了新电脑。没有anaconda,纯粹只是装了python3.11,然后突然也想手工安装下jupyter notebook,于是只能通过pip方…...
STM32刷Micropython固件参考指南
STM32刷Micropython固件指南 其实刷固件和普通的程序下载烧录无多大的差异,主要是其他因数的影响导致刷固件或刷完固件无法运行的情况和相关问题。 📑刷固件教程 固件下载。目前所支持的stm32型号有这些: stm32f0, stm32f4, stm32f7, stm32g…...
学生信息管理系统自动化测试
项目地址: http://82.156.151.156:8080/login.html 一、系统测试用例 二、测试实现过程 先是根据自己的项目设计了一个 UI 自动化测试用例, 然后根据这个测试用例使用了 selenium4自动化测试工具和 JUnit5单元测试框架结合实现的 web 自动化测试.。 测试模块划分…...
Java面向对象之toString()方法
toString()方法 toString()方法在Object类中定义,其返回值是String类型,返回类名和它的引用地址。在进行String与其它类型数据的连接操作时,自动调用toString()方法。 Date nownew Date(); System.out.println(“now”now); 相当于 System.…...
MySQL(一)
mysql简介 1、什么是数据库 ? 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅…...
使用docker部署node和react应用
使用docker部署node和react应用 Docker 使开发人员能够将所有应用程序打包到容器中。这些容器可以在任何安装了 Docker 的机器上运行,并且应用程序将是相同的。这是在多个系统上运行代码库克隆的好方法,并且我们可以确保它们都是相同的。 在本文中&…...
对List集合、数组去重
前言: 还记得在2021我发布的第一篇博客就是关于数组的去重,从那一刻开始,命运的齿轮开始转动…… 扯远了哈哈哈,我重新写这篇文章只是想让去重方式更加严谨(ps:我才不会说是因为技术成长了,看不上之前写的…...
AI相机“妙鸭相机”原理分析和手动实现方案
妙鸭相机 一个通过上传大约20张照片,生成专属自拍。在2023年7月末爆火,根据36Kr报道,妙鸭相机系阿里系产品,挂靠在阿里大文娱体系下,并非独立公司。 使用方法是上传20张自拍照片,之后可以选择模板生成自己…...
关于计算机大学生秋招面试的那点事?(Golang篇)
前言; Go语言(简称Golang)越来越受到开发者的关注和欢迎。它由Google公司于2009年推出,旨在提供更好的性能和并发性能。眼下,越来越多的公司在使用它,比如著名的云计算服务商AWS,以及知名电商京…...
Windows网络自学的第一天:创建线程
CreateThread函数: 该函数用于创建一个新的线程并在其上运行指定的函数,原型如下: HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes,SIZE_T dwStackSize,LPTHREAD_START_ROUTINE lpStartAddress,LPVOID …...
正确的 Java 异常处理
我们来谈谈痛点吧。由于我的职责,我必须使用许多不同的服务(进行编辑、进行代码审查......);不同的团队通常会编写所有这些服务,每当涉及到处理错误并从服务转发错误时,有时我的眼睛就会开始流泪。让我尝试…...
RTT(RT-Thread)时钟管理
目录 时钟管理 时钟节拍 RTT工程目录结构介绍 配置文件:rtconfig.h 获取系统节拍 获取系统节拍数函数 实例 定时器 RT_Thread定时器介绍 定时器源码分析(了解即可) rt_system_timer_init (硬件定时器初始化) rt_system_timer_thr…...
如何使用Apache Shiro实现企业级密码安全:完整配置指南
如何使用Apache Shiro实现企业级密码安全:完整配置指南 【免费下载链接】shiro Apache Shiro is a powerful and easy-to-use Java security framework that performs authentication, authorization, cryptography, and session management 项目地址: https://gi…...
小店想做私域推客,先把系统搭好
很多实体店、微信小店一上来就急着拉推客、发海报、搞裂变,忙活一圈下来:订单对不上、佣金算不清、推客留不住、老客户也反感,最后推客没做成,私域也做乱了。根本原因只有一个:系统没搭好,就急着上马干。私…...
LeetCode Hot 100 - 53. 最大子数组和(经典动态规划)
难度:中等 | 面试频率:⭐⭐⭐⭐⭐ 📝 题目描述 给你一个整数数组 nums,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组 是数组中的一个连续部分。 示例…...
Qt 树模型(Tree Model)的增删改查实战解析
1. Qt树模型基础概念解析 第一次接触Qt的树模型时,我完全被那些抽象概念绕晕了。直到做了几个实际项目后才明白,Tree Model本质上就是个数据管家,它帮我们管理树形结构的数据,并让这些数据能通过Qt的视图组件(比如QTre…...
11.1 LangChain 部署(代码测试)
非常抱歉!我彻底记住你的要求了!这次绝对严格执行:全文完整翻译、100%对齐原文结构、翻译通俗易懂、附加通俗理解,绝不做精简总结! 部署(Deploy)完整翻译 原文100%全覆盖 | 翻译通俗化 | 附加通俗理解 本页导航 前置条件 部署你的智能体 在 GitHub 上创建代码仓库 生产…...
网络初级第二次作业(静态路由配置)
一、网络拓扑图二、配置路由器改名和配置路由器:以AR1为例三、配置 PC端的网络参数:为PC1和PC2配置静态IP地址:四、配置静态路由为四个路由器分别配置静态路由:以AR3和AR4为例五、Ping测试...
芋道源码yudao-cloud 二开实战:自定义文件命名策略与存储路径优化
1. 为什么需要自定义文件命名策略 在实际开发中,文件上传功能看似简单,但隐藏着不少痛点。就拿我最近接手的项目来说,使用芋道源码yudao-cloud框架时,发现默认的文件上传策略是将文件内容进行哈希计算后生成文件名。这种设计虽然保…...
越用越强不是广告语:拆解 Hermes Agent 的三层学习机制
用 AI agent 有一段时间了,有个问题一直没解决:每次开新会话,它对我的项目和习惯还是一无所知。上下文配置文件里写了不少,但写进去的是静态的——它不会自己学,也不会根据我真实的操作习惯去调整。跑得熟不熟…...
PowerShell色彩魔法:利用ANSI转义序列打造个性化终端输出
1. 从黑白到彩色:PowerShell终端的美化革命 记得刚接触编程那会儿,最让我头疼的就是PowerShell那个黑漆漆的窗口。每次调试脚本,满屏的白色文字看得眼睛发酸,关键信息总是淹没在茫茫输出中。直到有一天,我在Linux终端看…...
Failed to configure a DataSource: ‘url‘ attribute is not specified and no embedded datasource could
一句话总结:Spring Boot 启动时试图自动配置数据库连接,但你在配置文件中既没提供数据库 URL,也没启用 H2/HSQLDB 等嵌入式数据库。 🚨 一、错误全貌(典型日志) 2026-04-12 12:04:26.318 INFO 21144 --- […...
