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

牛客——OR36 链表的回文结构(C语言,配图,快慢指针)

       

目录

思路一:链表翻转

思路二:快慢指针,分别从头和尾间开始比较


        本题是没有对C的支持的,但因为CPP支持C,所以这里就用C写了,可以面向更多用户

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

思路一:链表翻转

        简单的想想整形我们怎么比较,就是将整形A 依次取尾,放到整形B中。

int a = 121;
int t = a;
int b = 0;
while(t)
{int temp = t % 10;b = b*10+temp;t /= 10;
}
if(b == a)
{printf("Yes");
}

        这里我们也借用这个思路,先遍历一遍链表,取出每个节点的val,放到整形A中,在将链表翻转,再次取出每个节点的val,放到整形B中,进行比较。

struct ListNode {int val;struct ListNode *next;ListNode(int x) : val(x), next(NULL) {}
};
class PalindromeList {
public:bool chkPalindrome(ListNode* A) {// write code hereint ret1 = 0;   //原链表int ret2 = 0;struct ListNode* n1 = NULL;struct ListNode* n2 = A;struct ListNode* n3 = A->next;while(n2){ret1 = ret1 * 10 + n2->val;n2->next = n1;n1 = n2;n2 = n3;n3 = n3->next;}while(n1){ret2 =ret2* 10 + n1->val;n1 = n1->next;}if(ret1 == ret2){return true;}return false;}
};

思路二:快慢指针,分别从头和尾间开始比较

        这里的思路,是在思路一的基础上,在进了一步,让链表从中间到尾进行翻转,进行比较。

struct ListNode {int val;struct ListNode *next;ListNode(int x) : val(x), next(NULL) {}
};
class PalindromeList {
public://找出中间节点ListNode* MiddleList(ListNode* phead){ListNode* fast = phead;ListNode* slow = phead;while(fast && fast->next){fast = fast->next->next;slow=slow->next;}return slow;}//将中间节点到尾节点逆置ListNode* ReverseList(ListNode* phead){ListNode* n1 = NULL;ListNode* n2 = phead;ListNode* n3 = phead->next;while(n2){n2->next = n1;n1 =n2;n2 =n3;n3 = n3->next;}return n1;}bool chkPalindrome(ListNode* phead) {// write code hereListNode* mid = MiddleList(phead);ListNode* rev = ReverseList(phead);ListNode* cur =phead;while(cur && rev){if(cur->val != rev->val){return false;}cur =cur->next;rev =rev->next;}return true;}
};

相关文章:

  • mybatis报nvalid bound statement (not found)或者找不到xml文件
  • 【前端学java】Java中的异常处理(15)完结
  • 艺术作品3D虚拟云展厅能让客户远程身临其境地欣赏美
  • 2023.11.19使用flask制作一个文件夹生成器
  • EASYEXCEL(一)
  • 如何设计鞋材出库入账管理系统
  • 【rosrun diagnostic_analysis】报错No module named rospkg | ubuntu 20.04
  • 达索系统3DEXPERIENCE云端设计新体验
  • 怎么判断list是否为null
  • 2023年国自然植物科学相关面上项目信息公布(小麦、大麦、棉花、大豆、玉米)
  • 前端字符串方法汇总
  • 我叫:选择排序【JAVA】
  • 【JVM】JVM异常不打印堆栈信息 [ -XX:-OmitStackTraceInFastThrow ]
  • 动态规划求数组中相邻两数的最小差值( 即相差的绝对值 ) java 实现
  • 汽车托运汽车会产生公里数吗?
  • HTML中设置input等文本框为不可操作
  • npx命令介绍
  • React16时代,该用什么姿势写 React ?
  • spark本地环境的搭建到运行第一个spark程序
  • Spring Cloud Feign的两种使用姿势
  • 关于使用markdown的方法(引自CSDN教程)
  • 前嗅ForeSpider中数据浏览界面介绍
  • 时间复杂度与空间复杂度分析
  • 微信开放平台全网发布【失败】的几点排查方法
  • 学习笔记TF060:图像语音结合,看图说话
  • 做一名精致的JavaScripter 01:JavaScript简介
  • 1.Ext JS 建立web开发工程
  • (1)(1.11) SiK Radio v2(一)
  • (1)(1.13) SiK无线电高级配置(五)
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (pojstep1.1.2)2654(直叙式模拟)
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (阿里云万网)-域名注册购买实名流程
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • (转)Unity3DUnity3D在android下调试
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • *2 echo、printf、mkdir命令的应用
  • ./configure,make,make install的作用
  • .NET Core 成都线下面基会拉开序幕
  • .net php 通信,flash与asp/php/asp.net通信的方法
  • .net wcf memory gates checking failed
  • .NET 回调、接口回调、 委托
  • .net 无限分类
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
  • .Net面试题4
  • .net使用excel的cells对象没有value方法——学习.net的Excel工作表问题
  • .NET文档生成工具ADB使用图文教程
  • /etc/sudoers (root权限管理)
  • [ vulhub漏洞复现篇 ] JBOSS AS 5.x/6.x反序列化远程代码执行漏洞CVE-2017-12149
  • []我的函数库
  • [1] 平面(Plane)图形的生成算法
  • [AI]文心一言爆火的同时,ChatGPT带来了这么多的开源项目你了解吗
  • [C# WPF] 如何给控件添加边框(Border)?