初级算法(链表篇):判断一个链表是否为回文链表

这篇博客探讨了如何判断一个单链表是否为回文链表。通过使用快慢指针找到链表中间节点,然后对中间节点前部分进行反转,并比较原链表与反转后的部分来确定是否为回文。示例包括了不同情况的处理,如奇数长度和偶数长度链表。
摘要由CSDN通过智能技术生成

题目描述:

Given a singly linked list, determine if it is a palindrome.

Example 1:

Input: 1->2
Output: false
Example 2:

Input: 1->2->2->1
Output: true

Follow up:
Could you do it in O(n) time and O(1) space?

题目分析:

题目很明确,给定一个链表,判断其是否是回文链表。回文回文,顾名思义,即是顺着看和倒着看都是一样的,从这定义来看,最简单的方法就是对原链表进行反转,看反转后的链表与原链表是否相同。不过这样需要对整个链表进行反转,能否对其有所优化呢?再从回文的定义来看,既然顺着看和倒着看都一样,那么说明其是对称的,对于链表来说,就是链表的中间结点左右都是相同的。考虑到这点,就不难想出优化方法:只需遍历到中间结点,对链表中间结点前的部分进行反转,然后再从中间结点向两边遍历,如果一样,那么就说明链表两边是对称的,即是该链表是回文链表了。
因此这里首先是要找到中间结点,找中间结点最简单的方法是用一对快慢指针,初始化指向第一个结点,慢指针步长为1,快指针步长为2,如果链表长度为偶数,中间结点是不存在的,那么当快指针遍历到末尾(NULL)时,说明慢指针遍历到了第n/2+1个结点(n为链表长度);如果链表长度为奇数,那么当快指针指向的结点的下一个结点为NULL时,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值