【Leetcode刷题笔记之链表篇】234. 回文链表

😈博客主页:🐼大家好我叫张同学🐼
💖 欢迎点赞 👍 收藏 💗留言 📝 欢迎讨论! 👀
🎵本文由 【大家好我叫张同学】 原创,首发于 CSDN 🌟🌟🌟
精品专栏(不定时更新) 【数据结构+算法】 【做题笔记】【C语言编程学习】
☀️ 精品文章推荐
【C语言进阶学习笔记】三、字符串函数详解(1)(爆肝吐血整理,建议收藏!!!)
【C语言基础学习笔记】+【C语言进阶学习笔记】总结篇(坚持才有收获!)


前言

为什么要写刷题笔记
写博客的过程也是对自己刷题过程的梳理总结,是一种耗时有效的方法。
当自己分享的博客帮助到他人时,又会给自己带来额外的快乐和幸福。
(刷题的快乐+博客的快乐,简直是奖励翻倍,快乐翻倍有木有QAQ🙈)

题目内容

给你一个单链表的头节点 head ,请你判断该链表是否为回文链表
如果,返回 true ;否则,返回false

在这里插入图片描述

原题链接(点击跳转)

思路分析

回文结构
从前往后数和从后往前数均相同

从前往后:1 2 2 1
从后往前:1 2 2 1

具有对称性的链表就具有回文结构
如果是单数个结点,中间的结点无需考虑,如果其他结点对称肯定是回文结构
例如:1 2 3 1 2 也是回文结构

这里借助求链表倒数第k个结点的思路。
只要链表的

第1个结点=倒数第1个结点
第2个结点=倒数第2个结点

一直走到中间结点为止,都相同的话,就是回文结构。否则,就不是回文结构。

在这里插入图片描述
循环结束的进行/终止条件有很多,因为我们事先要求出链表的长度。

所以可以通过循环的步数:step <= 2/length
当然,也可以根据第k个和倒数第k个之间的关系: k <= length-k-1
此外,还可以通过结点指针的关系: cur->next != end || cur != end

函数实现
bool isPalindrome(struct ListNode* head){
   
    struct ListNode* tail = head;
    int length = 0;//求链表长度
    while(tail){
   
        tail = tail->next;
        length++;
    } 
    int k = 1;//顺数第k个,从1开始
    struct ListNode* cur = head,*end;
    while(k <= length-k){
   //倒数第k个就是顺序第length-k个
        end = head;
        for(int i = 0; i < length-k; i++){
   
            end = end->next;//通
  • 17
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大家好我叫张同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值