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

【百日算法计划】:每日一题,见证成长(013)

题目

回文链表

给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。
输入:head = [1,2,2,1]
输出:true

思路

  • 找到中间节点
  • 反转后半部分链表
  • 前后链表顺序比对
public boolean isPalindrome2(ListNode head) {
    if (head == null || head.next == null) return true;
    ListNode p = head;
    ListNode middleNode = findMiddleNode(p);
    ListNode q = reverseNode(middleNode.next); //因为要区分奇偶 所以传入中间节点的后一个节点

    while (q != null){
        if (p.val != q.val){
            return false;
        }
        p = p.next;
        q = q.next;
    }
    return true;
}

//寻找中间节点
public ListNode findMiddleNode(ListNode head){
	ListNode p1 = head;
	ListNode p2 = head;
	while(p1 != null && p1.next != null){
		p1 = p1.next.next;
		p2 = p2.next;
	}
	return p2;
}

//反转后半部分链表
public ListNode reverseNode(ListNode head){
	ListNode p = head;
	ListNode pre = null;
    
    while(p != null){
    	ListNode tmp = p.next;
    	p.next = pre;
    	pre = p;
    	p = tmp;
	}
	return pre;
}

http://www.kler.cn/news/312380.html

相关文章:

  • MySQL练手题--获得最近第二次的活动(困难)
  • 【JVM】符号引用 和 直接引用
  • 中国计算机学会(CCF)推荐中文科技期刊目录(2019年)
  • nacos报Client not connected, current status:STARTING
  • Stable Diffusion绘画 | ControlNet应用-IP-Adapter:堪比 Midjourney 垫图
  • Ubuntu在CMakeLists.txt中指定OpenCV版本的参考方法
  • 【QT基础】创建项目项目代码解释
  • Python和Java的自动化测试技术研究及应用探索
  • Linux Vim编辑器常用命令
  • 【源码+文档+调试讲解】健身房管理平台小程序
  • 【Linux修行路】网络套接字编程——UDP
  • 828华为云征文 | 云服务器Flexus X实例:one-api 部署,支持众多大模型
  • 信息化时代下的高标准农田灌区:变革与机遇并存
  • 使用Docker Compose一键部署
  • 105.游戏安全项目-基址的技术原理-分析技巧
  • 游戏性能优化
  • 硬件工程师笔试面试学习汇总——器件篇目录
  • 梳理归档文档
  • 鸿蒙开发之ArkUI 界面篇 十四 个人中心导航界面
  • 数据结构 ——— 常见的时间复杂度计算例题(上篇)
  • 使用Spring Boot和Spring WebFlux实现响应式打字效果
  • 使用 Python 高分解决 reCAPTCHA v3 的指南
  • orangepi部署web环境
  • 基于SpringBoot的考研资讯平台设计与实现
  • 李宏毅2022深度学习作业代码记录(hw1)—— COVID19
  • 进程状态的优先级
  • k8s-API 访问控制
  • rocky Linux 9.4系统配置zabbix监控MySQL主从复制状态与配置钉钉告警
  • 从0开始学ARM
  • 通过shell脚本一键修改Linux主机名和IP地址脚本