LeetCode 234. 回文链表的算法解析
创作时间:
作者:
@小白创作中心
LeetCode 234. 回文链表的算法解析
引用
CSDN
1.
https://m.blog.csdn.net/weixin_44245188/article/details/143515836
本文将介绍如何判断一个单链表是否为回文链表的算法问题。通过将链表的值复制到数组列表中,然后使用双指针法判断是否为回文,最后给出具体的Python代码实现。
给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。
算法一共为两个步骤:
- 复制链表值到数组列表中。
- 使用双指针法判断是否为回文。
第一步,我们需要遍历链表将值复制到数组列表中。我们用 currentNode 指向当前节点。每次迭代向数组添加 currentNode.val,并更新 currentNode = currentNode.next,当 currentNode = null 时停止循环。
执行第二步的最佳方法取决于你使用的语言。在 Python 中,很容易构造一个列表的反向副本,也很容易比较两个列表。而在其他语言中,就没有那么简单。因此最好使用双指针法来检查是否为回文。我们在起点放置一个指针,在结尾放置一个指针,每一次迭代判断两个指针指向的元素是否相同,若不同,返回 false;相同则将两个指针向内移动,并继续判断,直到两个指针相遇。
在编码的过程中,注意我们比较的是节点值的大小,而不是节点本身。正确的比较方式是:node_1.val == node_2.val,而 node_1 == node_2 是错误的。
下面是具体的Python代码实现:
class Solution:
def isPalindrome(self, head: ListNode) -> bool:
vals = []
current_node = head
while current_node is not None:
vals.append(current_node.val)
current_node = current_node.next
return vals == vals[::-1]
热门推荐
哈尔滨市强力推进六大措施 构建松花江流域水生态环境保护新格局
四季玫瑰修剪指南:打造美丽花园的实用技巧
盆栽小玫瑰花怎么养
非法拘禁是什么
保监会处理保险投诉:证据如何收集与呈现?
商誉:理解其含义及其对品牌价值的重要性
厄贝沙坦片的功效与作用是什么
优秀裁判文书展播七:居住权合同性质的认定应兼顾形式与实质审查
离婚协议的居住权受法律保护吗
同型半胱氨酸检测:饮食会影响结果吗?
《哪吒之魔童降世》:颠覆传统的神话重构与“不认命”的现代精神
多模态学习:融合多种数据源进行综合建模
抑郁症的健康教育
每天八杯水?孩子喝水的正确姿势你get了吗?
嘴巴好咸?试试这6个简单方法
如何写一篇1000字的Essay?
自学民谣吉他教材推荐:三本经典教材的优缺点分析
新公司如何有效开展融资:法律实务指南
庄子:逆向思维——打破常规,从相反的角度去思考问题
饭后什么动作可以瘦肚子
曹彰:三国时期曹魏宗室、将领
后世对曹彰的评价如何?有哪些与他相关的轶事典故?
地板材料优缺点分析
危险!救命用的灭火器竟被这样用?
16寸电脑长宽尺寸详解:与常见笔记本电脑尺寸对比
脚骨折放下来难受充血
VRRP技术解析与应用探讨
日本的世界遗产精华
跑步过量不仅影响健康,还更显老!
预防肺炎,接种这个疫苗很有必要!