如果是数组的话,直接找到中间下标,然后用两个指针,一个指向首元素,另一个指向最后一个元素,然后同时向中间走就能判断,但对于单链表来说,找到中间的结点是不能用下标访问的,所以采用快慢指针法,即慢指针一次走一步,快指针一次走两步,对于同一个链表,快指针的速度是慢指针的二倍,所以当快指针走到空,慢指针就走到了链表的中间位置,所以此时慢指针的位置就是“中间位置”,然后为了使后半部分和前半部分比较,要将后半部分的链表逆置,这样就能比较了。

链表的回文结构_牛客题霸_牛客网 (nowcoder.com)

代码如下:

struct ListNode* reverseList(struct ListNode* head){//逆置struct ListNode* n1 = NULL;struct ListNode* n2 = head;while(n2){struct ListNode* n3 = n2->next;//转向n2->next = n1;//迭代n1 = n2;n2 = n3;if(n3){n3 = n3->next;}}return n1;}
struct ListNode* middleNode(struct ListNode* head){//中间结点struct ListNode* fast = head;struct ListNode* slow = head;while(fast != NULL && fast->next != NULL){fast = fast->next->next;slow = slow->next;}return slow;}
class PalindromeList {
public:bool chkPalindrome(ListNode* A) {// write code herestruct ListNode* head = A;struct ListNode* mid = NULL;mid = middleNode(head);struct ListNode* rhead = NULL;rhead =  reverseList(mid);while(head && rhead){if(head->val != rhead->val){return false;}head = head->next;rhead = rhead->next;}return true;}
};

水平有限,欢迎指正

C语言习题——链表的回文结构相关推荐

  1. 用c语言实现单链表的初始化,建表,查找,求长度,插入,删除等操作,【YTU+2430+C语言习题+链表建立+插入+删除+输(5)...

    的打印.判断链表是否为空.计算链表长度.插入节点.删除节点.删除整个链表.(2) 线性表adt顺序存储实现中的创建.查找.插入和删除等基本操作及相关算法,线性表adt链式存储实现中单链表.循环链表和双 ...

  2. 广东工业大学 Anyviewce C语言 习题九

    广东工业大学 Anyviewce C语言 第九章 仅供参考 广东工业大学 Anyviewce C语言 习题七. 广东工业大学 Anyviewce C语言 习题八. 广东工业大学 Anyviewce C ...

  3. LeetCode 链表的回文结构

    链表的回文结构 题目描述 对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构. 给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构.保证 ...

  4. C语言打印链表的中间节点的算法(附完整源码)

    C语言打印链表的中间节点的算法 C语言打印链表的中间节点的算法完整源码(定义,实现,main函数测试) C语言打印链表的中间节点的算法完整源码(定义,实现,main函数测试) #include < ...

  5. C语言通过链表指针删除链表节点的算法(附完整源码)

    C语言通过链表指针删除链表节点的算法 C语言通过链表指针删除链表节点的算法完整源码(定义,实现,main函数测试) C语言通过链表指针删除链表节点的算法完整源码(定义,实现,main函数测试) #in ...

  6. C语言删除链表的算法(附完整源码)

    C语言删除链表的算法 C语言删除链表的算法完整源码(定义,实现,main函数测试) C语言删除链表的算法完整源码(定义,实现,main函数测试) #include <iostream>st ...

  7. C语言实现链表(附完整源码)

    C语言实现链表 链表 C语言实现链表完整源码 链表 链表是一种常见的基础数据结构,结构体指针在这里得到了充分的利用.链表可以动态的进行存储分配,也就是说,链表是一个功能极为强大的数组,他可以在节点中定 ...

  8. c语言在文本每一行末尾追加字符串,c语言在末尾添加 C语言 在链表尾部添加节点...

    怎么用C语言在一个文件后面添加内容 怎么用C语言在一个文件后面添加内容 使用fopen函数打开文件,用fseek函数将文件位置调整到文件末尾,然后用fwrite函数写入数据即可.下面的示例代码,向1. ...

  9. 剑指offer之C语言实现链表(两种方式)

    1 问题 用C语言实现链表 2 代码实现 #include <stdio.h> #include <stdlib.h>#define true 0 #define false ...

最新文章

  1. 三句话不离开用户体验的seo专员到底如何做好用户体验优化?
  2. 简历写了会Kafka,面试官90%会让你讲讲acks参数对消息持久化的影响
  3. 架构实例之Demo_JSP
  4. mysql 数据趋势,2019年8月全球数据库流行度排行--oracle、mysql增长趋势明显
  5. Azure下通过Powreshell批量添加、删除VM终结点
  6. 【LeetCode】11. Container With Most Water 解题小结
  7. win7配置iis 出现:HTTP 错误 403.14 - Forbidden Web 服务器被配置为不列出此目录的内容...
  8. ElasticSearch 5学习(10)——结构化查询(包括新特性)
  9. html css 博客园,分享几个博客园代码样式的CSS配置(复制黏贴即可)
  10. 【html】表格table与表单form
  11. ubuntu1804安装YouCompleteMe 配置vim
  12. matlab 取符号函数,Matlab 符号表达式和符号函数的操作
  13. VMware中Linux网络配置
  14. dw添加下拉菜单_Dreamweaver怎么创建下拉菜单
  15. 怎样将Sublime Text 设置成中文版(完整教程)
  16. android 高级工具包,root工具箱app下载
  17. AppWeb认证绕过漏洞(CVE-2018-8715)漏洞复现
  18. JAVA课程设计——医院挂号系统
  19. mac获取ios应用包名
  20. NVDIMM编程模型原理大概推导梳理

热门文章

  1. Less系列之转义(Escaping)
  2. wordpress MP4视频在网页中无法播放的情况解决方式
  3. 路由器NAT类型检测
  4. wh计算公式_等量未必能代换 电池里的mAh和Wh并不简单
  5. 批量读取文件名和批量改写文件名
  6. 计算机职业素质选修课,公共选修课网上选课系统的设计与实现-计算机应用技术专业论文.docx...
  7. 中国科学技术史论文计算机,选修课《中国科学技术史》期末论文
  8. 3度带、6度带带号与中央经线
  9. 51单片机的入门知识(献给初学者最易懂的文章)
  10. [OpenGL ES 01]OpenGL ES之初体验