当前位置: 首页 > 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/a/312380.html

相关文章:

  • 【优选算法篇】微位至简,数之恢宏——解构 C++ 位运算中的理与美
  • 一文快速预览经典深度学习模型(一)——CNN、RNN、LSTM、Transformer、ViT
  • 使用 PyTorch 实现并测试 AlexNet 模型,并使用 TensorRT 进行推理加速
  • 【分布式】分布式锁设计与Redisson源码解析
  • 「C/C++」C++ STL容器库 之 std::map 键值容器类
  • 解锁函数的魔力:Python 中的多值传递、灵活参数与无名之美
  • 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 界面篇 十四 个人中心导航界面
  • 数据结构 ——— 常见的时间复杂度计算例题(上篇)