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

LeetCode.234. 回文链表

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

示例 1:
输入:head = [1,2,2,1]
输出:true
示例 2:
输入:head = [1,2]
输出:false

解题思路:
先找到链表的中间节点,然后反转中间节点之后的部分,最后比较原链表前半部分和反转后的后半部分是否相同。

  1. middleNode 函数:使用快慢指针法找到链表的中间节点。快指针每次移动两步,慢指针每次移动一步,当快指针到达链表末尾时,慢指针刚好指向中间节点。
  2. reverseList 函数:通过迭代的方式反转链表。使用三个指针 curnext 和 rhead 来实现节点的反转。
  3. isPalindrome 函数
    • 调用 middleNode 函数找到链表的中间节点。
    • 调用 reverseList 函数反转中间节点之后的部分。
    • 比较原链表前半部分和反转后的后半部分是否相同。
struct ListNode* middleNode(struct ListNode* head){
    struct ListNode* slow = head,* fast = head;
    while(fast && fast->next){
        slow = slow->next;
        fast = fast->next->next;
    }
    return slow;
}

struct ListNode* reverseList(struct ListNode* head){
    struct ListNode* cur = head;
    struct ListNode* rhead = NULL;
    while(cur){
        struct ListNode* next= cur->next;
        cur->next = rhead;
        rhead = cur;
        cur = next;
    }
    return rhead;
}

bool isPalindrome(struct ListNode* head) {
    struct ListNode* mid = middleNode(head);// 找到链表的中间节点
    struct ListNode* rmid = reverseList(mid);// 反转链表
    while(rmid){
        if(rmid->val != head->val){
            return false;
        }else{
            rmid = rmid->next;
            head = head->next;
        }
    }
    return true;
}

相关文章:

  • 峰飞航空与合肥开启全面合作,打造先进空中立体多维交通运输生态
  • 国家出手肥胖问题,AI减肥起风了
  • Element Plus 图标使用方式整理
  • 【力扣hot100题】(076)买卖股票的最佳时机
  • 基于华为云kubernetes的应用多活的示例
  • 基于PyQt5的企业级生日提醒系统设计与实现
  • AI智能体需求研究报告:小红书、知乎、抖音等平台用户需求深度分析
  • 【QT】QT中的文件IO
  • 【SpringBoot】98、SpringBoot中整合springdoc-openapi-ui接口文档
  • 网络出故障时,四大表(MAC表、ARP表、路由表、转发表)怎么查?看看这套排查顺序
  • 操作系统常用命令
  • 点击抽奖功能总结
  • 更改CMD背景图片
  • [特殊字符] 手机连接车机热点并使用 `iperf3` 测试网络性能
  • 让你的MCP符合openai协议
  • 时间序列频率转换
  • 【Python】读取xlsb或xlsx的单一或连续单元格工具类
  • 从0到1构建工具站 - day6 (在线编程工具-docker)
  • C++初阶-C++入门基础
  • ubuntu自动更新--unattended-upgrades
  • 邯郸单位网站建设/网站推广什么意思
  • 北京欢迎你网站制作公司/北京百度推广seo
  • 肥城网站建设/企业网络营销策划案例
  • 婚礼做的好的婚庆公司网站/郑州网站推广方案
  • 南昌网站建设信息/网页制作培训网站
  • 专门做网站/网络营销论坛