回文结构:
所谓的回文结构就是将一组数值分为两个部分,并用取一个中间值,除去中间值外,其他的数值都是一一镜面对称相同。
如:
这就是单链表的回文结构 。
题目:
- 判断单链表是否符合回文结构:
- 对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。
- 给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。
题源:链表的回文结构_牛客题霸_牛客网 (nowcoder.com)
思路:
想要判断一个链表是否是回文结构,我们第一个想到的就是对链表的另一半进行拆分,组建一个新的链表。
但是对于链表而言,回文结构的判断分为了两种情况,第一种,链表是奇数节点的链表,即链表的节点个数是奇数,第二种,链表是偶数节点,即链表的个数是偶数。
对于偶数节点的链表,对于链表的拆分并不会有多大的影响,而对于奇数而言,则会影响中间节点的归属问题和指向确认问题。
- 如图所示,如果从中间节点进行拆分则会出现问题。
- 所以,我们直接在链表上进行修改,先使用快慢指针寻找道链表的节点,而后从链表的节点开始进行指向的修改,以中间节点为头节点,改变之后的节点指向。
而后,改变方向后,从原链表的最后一个节点进行比对。
代码演示:
参考代码:
寻找中间节点:单链表经典OJ题:找出链表的中间节点-CSDN博客
反转链表: 单链表经典OJ题:反转链表-CSDN博客