C语言习题——链表的回文结构
如果是数组的话,直接找到中间下标,然后用两个指针,一个指向首元素,另一个指向最后一个元素,然后同时向中间走就能判断,但对于单链表来说,找到中间的结点是不能用下标访问的,所以采用快慢指针法,即慢指针一次走一步,快指针一次走两步,对于同一个链表,快指针的速度是慢指针的二倍,所以当快指针走到空,慢指针就走到了链表的中间位置,所以此时慢指针的位置就是“中间位置”,然后为了使后半部分和前半部分比较,要将后半部分的链表逆置,这样就能比较了。
链表的回文结构_牛客题霸_牛客网 (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语言习题——链表的回文结构相关推荐
- 用c语言实现单链表的初始化,建表,查找,求长度,插入,删除等操作,【YTU+2430+C语言习题+链表建立+插入+删除+输(5)...
的打印.判断链表是否为空.计算链表长度.插入节点.删除节点.删除整个链表.(2) 线性表adt顺序存储实现中的创建.查找.插入和删除等基本操作及相关算法,线性表adt链式存储实现中单链表.循环链表和双 ...
- 广东工业大学 Anyviewce C语言 习题九
广东工业大学 Anyviewce C语言 第九章 仅供参考 广东工业大学 Anyviewce C语言 习题七. 广东工业大学 Anyviewce C语言 习题八. 广东工业大学 Anyviewce C ...
- LeetCode 链表的回文结构
链表的回文结构 题目描述 对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构. 给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构.保证 ...
- C语言打印链表的中间节点的算法(附完整源码)
C语言打印链表的中间节点的算法 C语言打印链表的中间节点的算法完整源码(定义,实现,main函数测试) C语言打印链表的中间节点的算法完整源码(定义,实现,main函数测试) #include < ...
- C语言通过链表指针删除链表节点的算法(附完整源码)
C语言通过链表指针删除链表节点的算法 C语言通过链表指针删除链表节点的算法完整源码(定义,实现,main函数测试) C语言通过链表指针删除链表节点的算法完整源码(定义,实现,main函数测试) #in ...
- C语言删除链表的算法(附完整源码)
C语言删除链表的算法 C语言删除链表的算法完整源码(定义,实现,main函数测试) C语言删除链表的算法完整源码(定义,实现,main函数测试) #include <iostream>st ...
- C语言实现链表(附完整源码)
C语言实现链表 链表 C语言实现链表完整源码 链表 链表是一种常见的基础数据结构,结构体指针在这里得到了充分的利用.链表可以动态的进行存储分配,也就是说,链表是一个功能极为强大的数组,他可以在节点中定 ...
- c语言在文本每一行末尾追加字符串,c语言在末尾添加 C语言 在链表尾部添加节点...
怎么用C语言在一个文件后面添加内容 怎么用C语言在一个文件后面添加内容 使用fopen函数打开文件,用fseek函数将文件位置调整到文件末尾,然后用fwrite函数写入数据即可.下面的示例代码,向1. ...
- 剑指offer之C语言实现链表(两种方式)
1 问题 用C语言实现链表 2 代码实现 #include <stdio.h> #include <stdlib.h>#define true 0 #define false ...
最新文章
- 三句话不离开用户体验的seo专员到底如何做好用户体验优化?
- 简历写了会Kafka,面试官90%会让你讲讲acks参数对消息持久化的影响
- 架构实例之Demo_JSP
- mysql 数据趋势,2019年8月全球数据库流行度排行--oracle、mysql增长趋势明显
- Azure下通过Powreshell批量添加、删除VM终结点
- 【LeetCode】11. Container With Most Water 解题小结
- win7配置iis 出现:HTTP 错误 403.14 - Forbidden Web 服务器被配置为不列出此目录的内容...
- ElasticSearch 5学习(10)——结构化查询(包括新特性)
- html css 博客园,分享几个博客园代码样式的CSS配置(复制黏贴即可)
- 【html】表格table与表单form
- ubuntu1804安装YouCompleteMe 配置vim
- matlab 取符号函数,Matlab 符号表达式和符号函数的操作
- VMware中Linux网络配置
- dw添加下拉菜单_Dreamweaver怎么创建下拉菜单
- 怎样将Sublime Text 设置成中文版(完整教程)
- android 高级工具包,root工具箱app下载
- AppWeb认证绕过漏洞(CVE-2018-8715)漏洞复现
- JAVA课程设计——医院挂号系统
- mac获取ios应用包名
- NVDIMM编程模型原理大概推导梳理
热门文章
- Less系列之转义(Escaping)
- wordpress MP4视频在网页中无法播放的情况解决方式
- 路由器NAT类型检测
- wh计算公式_等量未必能代换 电池里的mAh和Wh并不简单
- 批量读取文件名和批量改写文件名
- 计算机职业素质选修课,公共选修课网上选课系统的设计与实现-计算机应用技术专业论文.docx...
- 中国科学技术史论文计算机,选修课《中国科学技术史》期末论文
- 3度带、6度带带号与中央经线
- 51单片机的入门知识(献给初学者最易懂的文章)
- [OpenGL ES 01]OpenGL ES之初体验