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

链表练习 Leetcode234.回文链表

 题目传送门:Leetcode234

给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。

示例 1:

输入:head = [1,2,2,1]
输出:true

示例 2:

输入:head = [1,2]
输出:false

提示:

  • 链表中节点数目在范围[1, 105] 内
  • 0 <= Node.val <= 9

进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?

试题解析

提供两种方法

第一种方法:数组法

  • 将链表所有节点对应的value值从左到右存入数组中
  • 在数组内进行首尾元素匹配,直至数组中间位置

第二种方法:链表法

  • 首先找到链表中间节点
  • 将中间节点后的链表翻转,得到新链表
  • 将初始链表和新链表的元素进行匹配
数组法代码
class Solution {//双指针方法public:bool isPalindrome(ListNode* head) {if (head->next == nullptr) return true;vector<int> v;//将链表中所有值复制到数组中while (head != nullptr) {v.push_back(head->val);head = head->next;}//数组前后依次比较for (int i = 0, j = v.size() - 1; i < j; i++, j--) {if (v[i] != v[j]) {return false;}}return true;}
};
链表法代码
/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:bool isPalindrome(ListNode* head) {int num = 1;ListNode* pTempHead = getMiddleHead(head,&num);pTempHead = reverseList(pTempHead);//num用来计数,进行最后的匹配for(int i = 0; i < num; i ++){if(head->val != pTempHead->val) return false;head = head->next;pTempHead = pTempHead->next;}return true;}//得到中间节点ListNode* getMiddleHead(ListNode* head,int* num){ListNode* pSlow = head;ListNode* pFast = head;while(pFast->next != nullptr && pFast->next->next != nullptr){(*num)++;pSlow = pSlow->next;pFast = pFast->next->next;}return pSlow;}//反转中间节点后的链表ListNode* reverseList(ListNode* head){ListNode* pNewHead = nullptr;ListNode* pTake = head;ListNode* pBreak = head->next;while(pBreak != nullptr){pTake->next = pNewHead;pNewHead = pTake;pTake = pBreak;pBreak = pBreak->next;}pTake->next = pNewHead;return pTake;}
};

相关文章:

  • 通过浏览器判断是否安装APP
  • MacBook安装Storm与启动
  • Jenkins-Maven Git
  • 2023极客大挑战web小记
  • Android Traceview 定位卡顿问题
  • Angular系列教程之zone.js和NgZone
  • 在 SpringBoot中的WebSocket使用介绍
  • Nginx+Tomcat负载均衡、动静分离以及Nginx负载均衡和四层代理
  • macOS向ntfs格式的移动硬盘写数据
  • web开发学习笔记(2.js)
  • C#,字符串匹配(模式搜索)原生(Native)算法的源代码
  • Node cool 跨域问题的解决
  • kibana查看和展示es数据
  • 2024秋招,顺丰科技测试开发工程师一面
  • CleanMyMac X .4.14.7如何清理 Mac 系统?
  • 0x05 Python数据分析,Anaconda八斩刀
  • CSS居中完全指南——构建CSS居中决策树
  • ES2017异步函数现已正式可用
  • express如何解决request entity too large问题
  • extjs4学习之配置
  • HashMap ConcurrentHashMap
  • leetcode386. Lexicographical Numbers
  • leetcode讲解--894. All Possible Full Binary Trees
  • Making An Indicator With Pure CSS
  • Mithril.js 入门介绍
  • mongodb--安装和初步使用教程
  • PHP 小技巧
  • 深入浅出Node.js
  • 算法-插入排序
  • 项目实战-Api的解决方案
  • 小程序测试方案初探
  • # 数据结构
  • # 透过事物看本质的能力怎么培养?
  • (1)SpringCloud 整合Python
  • (算法)Travel Information Center
  • .NET Framework 4.6.2改进了WPF和安全性
  • .net MVC中使用angularJs刷新页面数据列表
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)
  • .Net 垃圾回收机制原理(二)
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)
  • .net实现头像缩放截取功能 -----转载自accp教程网
  • /etc/X11/xorg.conf 文件被误改后进不了图形化界面
  • [20171106]配置客户端连接注意.txt
  • [2019.3.5]BZOJ1934 [Shoi2007]Vote 善意的投票
  • [C++]Leetcode17电话号码的字母组合
  • [codevs] 1029 遍历问题
  • [hdu 3652] B-number
  • [Kubernetes]9. K8s ingress讲解借助ingress配置http,https访问k8s集群应用
  • [LeetCode] Wildcard Matching
  • [LeetCode]剑指 Offer 42. 连续子数组的最大和
  • [python] dataclass 快速创建数据类
  • [Spring Cloud] gateway全局异常捕捉统一返回值
  • [SUCTF 2019]EasyWeb
  • [SWPUCTF 2021 新生赛]Do_you_know_http
  • [车联网安全自学篇] Android安全之检测APK中调试代码是否暴露敏感信息