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

链表的回文结构题解

首先阅读题目:

1.要保证是回文结构

2.他的时间复杂度为O(n)、空间复杂度为O(1)

给出思路:

1.首先利用一个函数找到中间节点

2.利用一个函数逆置中间节点往后的所有节点

3.现在有两个链表,第一个链表取头节点一直到中间节点、第二个链表取头结点到尾结点

4.比较两个链表,从头比到尾,如果都相同,就返回true,否则返回false

解答题目:

1.首先完成函数来找到中间节点,这个以前讲过,可以参考下面链接:

https://blog.csdn.net/xpcxpt/article/details/147618198?spm=1001.2014.3001.5501

2.完成函数实现逆置,这个以前也讲过,可以参考下面链接:

https://blog.csdn.net/xpcxpt/article/details/147618123?spm=1001.2014.3001.5501

3.有了两个前置函数middleNode()和reverseList(),可以很好的解决题目

定义两个指针接受函数的返回值;

while循环比较两个链表,都相同返回true,有一个不相同就返回false

代码如下:

/*
struct ListNode {int val;struct ListNode *next;ListNode(int x) : val(x), next(NULL) {}
};*/
typedef struct ListNode LSTNode;
class PalindromeList {public:struct ListNode* middleNode(struct ListNode* head) {LSTNode* slow, *fast;fast = slow = head;while (fast && fast->next) {slow = slow->next;fast = fast->next->next;}return slow;}struct ListNode* reverseList(struct ListNode* head) {if (head == NULL) {return head;}LSTNode* n1, *n2, *n3;n1 = NULL;n2 = head;n3 = n2->next;while (n2) {n2->next = n1;n1 = n2;n2 = n3;if (n3) {n3 = n3->next;}}return n1;}bool chkPalindrome(ListNode* A) {struct ListNode* mid = middleNode(A);//指向中间节点的指针struct ListNode* rmid=reverseList(mid);//逆置了,这个指针指向的相同于原链表的尾结点while(rmid&&A)//两个都不能为空{if(rmid->val!=A->val)//有一个不相同{return false;}rmid=rmid->next;//向后走A=A->next;//向后走}return true;//都相同的情况}
};

http://www.xdnf.cn/news/270235.html

相关文章:

  • Linux 的 epoll 与 Windows 的 IOCP 详解
  • Mybatis学习(上)
  • 04 基于 STM32 的时钟展示程序
  • 《算法导论(第4版)》阅读笔记:p4-p5
  • HTML与CSS实现风车旋转图形的代码技术详解
  • Webug4.0靶场通关笔记10- 第14关链接注入
  • 深度学习助力校园学生自杀预防
  • wsl2 中使用串口
  • 【信息系统项目管理师】【论文】项目背景示例
  • 66. Java 嵌套类
  • 二叉树最近公共祖先(后序遍历,回溯算法)
  • 强化学习--4.策略梯度方法(蒙特卡罗)
  • 数字信号处理学习笔记--Chapter 0 数字信号处理概述
  • Python 部分内置函数及其用法详解
  • HTML打印设置成白色,但是打印出来的是灰色的解决方案
  • mcp+llm+rag
  • 隐藏元素的多种方式
  • TFT(薄膜晶体管)和LCD(液晶显示器)区别
  • zabbix 重置登录密码
  • 【文献阅读】全球干旱地区植被突变的普遍性和驱动因素
  • 陶瓷陶器缺陷检测VOC+YOLO格式938张2类别
  • 时间交织(TIADC)的失配误差校正处理(以4片1GSPS采样率的12bitADC交织为例讲解)
  • 64常用控件_多元素控件介绍
  • Linux中进程的属性:进程优先级
  • MySQL 分库分表
  • C++ 中 virtual 的作用
  • 基于 vue-flow 实现可视化流程图
  • 第7章 【Python数据类型大爆炸】Python 基础语法和数据类型特性的实例
  • “c++11“,右值,右值引用,可变参数模板...
  • GPU集群监控系统开发实录:基于Prometheus+Grafana的算力利用率可视化方案