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

链表的回文结构

目录

一.题目及剖析

二.思路引入

三.代码引入

四.扩展


一.题目及剖析

https://www.nowcoder.com/practice/d281619e4b3e4a60a2cc66ea32855bfa?tab=note

众所周知,如果这道题的链表改为数组,这道题将十分简单,用左右指针就行,但人家说的是链表,显然左右指针是行不通的.

二.思路引入

1.找到链表的中间节点,将其分为两部分

2.将后半部分反转

3.如果反转后value与前半部分一样,则是回文结构

而前两步之前的我的博客有介绍

三.代码引入

/*
struct ListNode {int val;struct ListNode *next;ListNode(int x) : val(x), next(NULL) {}
};*/
class PalindromeList {
public:struct ListNode* intermediateNode(struct ListNode* head){struct ListNode* slow, *fast;slow = fast = head;while(fast && fast->next){fast = fast->next->next;slow = slow->next;}return slow;}struct ListNode* overturnList(struct ListNode* head){struct ListNode *n1, *n2, *n3;n1 = NULL;n2 = n3 = head;if(head)n3 = head->next;while(n2){n2->next = n1;n1 = n2;n2 = n3;if(n3)n3 = n3->next;}return n1;}bool chkPalindrome(ListNode* A) {// write code herestruct ListNode* pcur = intermediateNode(A);struct ListNode* prev = overturnList(pcur);while(prev){if(A->val != prev->val)return false;prev = prev->next;A = A->next;}return true;}
};

四.扩展

当然对于这道题,我们还可以有其他的解法,比如遍历这个链表,将其中的value存放至一个数组中,然后我们就可以使用左右指针去解决,这个算法的时间复杂度是o(n+logn),而第一种方法的时间复杂度是o(n)

相关文章:

  • 【Java万花筒】数据流的舵手:大数据处理和调度库对比指南
  • C语言if语句底层原理,从汇编深入理解
  • MIT-BEVFusion系列八--onnx导出1 综述及相机网络导出
  • StarRocks表设计——分区分桶与副本数
  • 基于微信小程序的健身房私教预约系统,附源码
  • 极其抽象的SpringSecurity理解
  • 【前端工程化面试题】webpack proxy的工作原理,为什么能解决跨域问题
  • devc++ 使用 winsock 实现 UDP 广播
  • Rust 初体验6
  • phpstrom创建thinkphp项目
  • 【Webpack】处理 js 资源
  • C++运算符重载(日期类的运算符重载为例)
  • js---webAPI
  • 原型设计模式
  • 工作心得——css让元素居中的方法
  • 2017 前端面试准备 - 收藏集 - 掘金
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • extract-text-webpack-plugin用法
  • Facebook AccountKit 接入的坑点
  • HTTP中的ETag在移动客户端的应用
  • maven工程打包jar以及java jar命令的classpath使用
  • pdf文件如何在线转换为jpg图片
  • Redis在Web项目中的应用与实践
  • 百度小程序遇到的问题
  • 彻底搞懂浏览器Event-loop
  • 关于extract.autodesk.io的一些说明
  • 力扣(LeetCode)965
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 七牛云假注销小指南
  • 小程序测试方案初探
  • 异步
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • 从如何停掉 Promise 链说起
  • 湖北分布式智能数据采集方法有哪些?
  • 组复制官方翻译九、Group Replication Technical Details
  • #1014 : Trie树
  • #Z2294. 打印树的直径
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (六)Hibernate的二级缓存
  • (区间dp) (经典例题) 石子合并
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • (转)母版页和相对路径
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .NET Core 通过 Ef Core 操作 Mysql
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .NET 的程序集加载上下文
  • .Net 知识杂记
  • .NetCore部署微服务(二)
  • .NET分布式缓存Memcached从入门到实战
  • .Net下使用 Geb.Video.FFMPEG 操作视频文件