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

LeetCode234. 回文链表(2024秋季每日一题 26)

给你一个单链表的头节点 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) 空间复杂度解决此题?


解法一:通过数组记录,然后遍历判断是否回文
时间复杂度: O ( N ) O(N) O(N)
空间复杂度: O ( N ) O(N) O(N)

/*** 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) {vector<int> res;while(head != nullptr){res.push_back(head -> val);head = head -> next;}int n = res.size();for(int i = 0; i < n / 2; i++){if(res[i] != res[n-i-1])return false;}return true;}
};

解法二:

  • 计算出原链表的节点个数,找到后半部分头结点
  • 将后半部分链表反转,并记录翻转后的后半部分链表的头结点
  • 同时遍历前后两个链表,判断是否回文

时间复杂度: O ( N ) O(N) O(N)
空间复杂度: O ( 1 ) O(1) O(1)

class Solution {
public:bool isPalindrome(ListNode* head) {if(head -> next == nullptr) return true;// 计算出总节点数int cnt = 0;ListNode*  lh = head, * rh = head;while(head != nullptr){cnt++;head = head -> next;}// 找到后半部分的头结点for(int i = 1; i <= cnt / 2; i++){rh = rh->next;}// 记录左边结束的位置ListNode* ed = rh;// 反转后半部分链表ListNode* pre = nullptr, *ne;while(rh != nullptr){ne = rh -> next;rh->next = pre;pre = rh;rh = ne;}rh = pre; // 翻转后后半部分的头结点// 遍历两个部分,判断是否是回文while(lh != ed){if(lh->val != rh->val)return false;lh = lh -> next;rh = rh -> next;}return true;}
};
http://www.lryc.cn/news/445501.html

相关文章:

  • 项目(石头剪刀布游戏双循环)
  • Linux 进程3
  • R语言机器学习遥感数据处理与模型空间预测技术及实际项目案例分析
  • shell linux cut 切割字符串
  • golang学习笔记31——golang 怎么实现枚举
  • fastadmin本地安装插件提示”请从官网渠道下载插件压缩包(code:2)(code:1)“
  • STM32基础学习笔记-Timer定时器面试基础题5
  • CSS06-元素显示模式、单行文字垂直居中
  • 【车联网安全】车端网络攻击及检测的框架/模型
  • 58.【C语言】内存函数(memcpy函数)
  • rust一些通用编程的概念
  • SpringBoot基础知识
  • ubuntu配置libtorch CPU版本
  • Docker MySql 数据备份、恢复
  • django项目添加测试数据的三种方式
  • 用Python提取PDF表格到Excel文件
  • Java基础|多线程:多线程分页拉取
  • Android RecyclerView 实现 GridView ,并实现点击效果及方向位置的显示
  • Centos中dnf和yum区别对比
  • CVPT: Cross-Attention help Visual Prompt Tuning adapt visual task
  • 基于双向 LSTM 和 CRF 的序列标注模型
  • 为何美国与加拿大边界看似那么随意?
  • 什么是触发器(Trigger)?触发器何时会被触发?
  • 一步一步优化一套生成式语言模型系统
  • Q必达任务脚本
  • 问请问请问2312123213123
  • Vue3:快速生成模板代码
  • 文件上传-php
  • C++设计模式(更新中)
  • Kali crunsh字典工具