链表的回文结构OJ

ops/2024/10/15 22:24:07/

链表的回文结构_牛客题霸_牛客网对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为。题目来自【牛客题霸】icon-default.png?t=N7T8https://www.nowcoder.com/practice/d281619e4b3e4a60a2cc66ea32855bfa?tpId=49&&tqId=29370&rp=1&ru=/activity/oj&qru=/ta/2016test/question-ranking

题目

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

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

测试样例:
1->2->2->1
返回:true

 本题用到了链表的逆转和链表的中间节点的应用

首先说一下链表的中间节点的查找

struct ListNode* midfind(struct ListNode* head)
{struct ListNode*fast,*slow=head;while(fast&&fast->next){fast=fast->next->next;slow=slow->next;}return slow;}

 中间结点的查找主要运用到了快慢指针的遍历。快指针比慢指针多走一步,最后快指针走到NULL,或者快指针的next为NULL停止。

再来说一下链表的逆转

struct ListNode* reverselist(struct ListNode*head)
{struct ListNode*prve= NULL;struct ListNode*cur=head;while(cur){struct ListNode*next=cur->next;cur->next=prve;prve=cur;cur=next;}return prve;
}

逆转的本质是要先定义一个空指针,如上代码的*prve,然后下一步就开始保存cur的下一个指针,防止cur被覆盖,导致下一个节点丢失。最后返回prve即可。原因是这是的cur已经指向NULL,所以无意义

最后是实现链表回文(注意:C++兼容C语言)

#include <algorithm>
class PalindromeList {
public:struct ListNode* midfind(struct ListNode* head)
{struct ListNode*fast,*slow=head;while(fast&&fast->next){fast=fast->next->next;slow=slow->next;}return slow;}
struct ListNode* reverselist(struct ListNode*head)
{struct ListNode*prve= NULL;struct ListNode*cur=head;while(cur){struct ListNode*next=cur->next;cur->next=prve;prve=cur;cur=next;}return prve;
}bool chkPalindrome(ListNode* A) {
struct ListNode* mid=midfind(A);
struct ListNode* revermid=reverselist(mid);
while(revermid&&A)
{if(revermid->val!=A->val){return false;
}
revermid=revermid->next;A=A->next;}return true;
}};


http://www.ppmy.cn/ops/47847.html

相关文章

基于简单Agent对医疗数据进行分析

数据表 供应商资格审核规定.pdf 医生名录.xlsx 历史就诊记录.xlsx 患者信息名录.xlsx 药品.xlsx 药品库存管理.xlsx 采购单位基本信息.xlsx Agent测试 模型基于ChatGPT-3.5 问题&#xff1a;帮我找出不达标的供应商 Agent分析过程 [Thought: 0] Key Concepts: - 不达标的供…

群体优化算法---蜂群优化算法应用于数据挖掘

介绍 蜂群优化算法&#xff08;Bee Algorithm, BA&#xff09;及其变种主要模拟蜜蜂的觅食行为&#xff0c;以解决复杂的优化问题。这类算法通过蜜蜂之间的信息交流和协作来探索解空间&#xff0c;寻找全局最优解。主要应用于参数优化&#xff0c;结构优化&#xff0c;机器学习…

Windows 搭建C++ 纯开源开发环境 进行 YOLOv8 模型推理的开发测试环境

文章大纲 IDE 选择纯开源首选 Codeblocks 跨平台开发IDE其次选择 visual studio 社区版 or visual studio code包管理MSYS2pacmanconda & mambavcpkgNuGetapt-get其他手动配置 Visual studio 开发环境下载 visual studio基本配置基本测试:打开图片,打开摄像头读取图片读取…

探索未来科技的前沿:从量子计算到人机融合

探索未来科技的前沿:从量子计算到人机融合 科技的飞速发展正在不断改变我们的生活方式。从人工智能(AI)到物联网(IoT),再到区块链和量子计算,每一个新兴技术都在推动着我们的社会走向一个全新的未来。本文将深入探讨几项最新的前沿科技,了解它们如何改变我们的世界以及…

Flutter 中的 TableCell 小部件:全面指南

Flutter 中的 TableCell 小部件&#xff1a;全面指南 Flutter 是一个功能强大的 UI 框架&#xff0c;由 Google 开发&#xff0c;允许开发者使用 Dart 语言构建跨平台的移动、Web 和桌面应用。在 Flutter 的丰富组件库中&#xff0c;TableCell 是一个用于创建表格单元格的组件…

从零开始:疾控中心实验室装修攻略,让你的实验室一步到位!

在当今充满挑战和变化的世界中&#xff0c;疾病的控制和预防成为了人类生存与发展的重要课题。而疾控中心作为防控疾病的核心机构&#xff0c;其疾控中心实验室设计建设显得尤为重要。下面广州实验室装修公司小编将分享疾控中心实验室设计建设方案&#xff0c;为疾病防控工作提…

day26-单元测试

1. 单元测试Junit 1.1 什么是单元测试&#xff1f;&#xff08;掌握&#xff09; 1.2 Junit的特点&#xff1f;&#xff08;掌握&#xff09; 1.3 基本用法&#xff1a;&#xff08;掌握&#xff09; 实际开发中单元测试的使用方式&#xff08;掌握&#xff09; public class …

面试题:你怎么理解 HTML 语义化?语义化有什么优点?

面试题&#xff1a;你怎么理解 HTML 语义化&#xff1f;语义化有什么优点&#xff1f; 你怎么理解 HTML 语义化&#xff1f; &#xff08;语义化是什么&#xff09;HTML 语义化要求开发者尽量使用有意义的标签来组织网页&#xff0c;而不是像 div、span 等无意义的标签&#…