经典OJ题:单链表的回文结构

回文结构:

所谓的回文结构就是将一组数值分为两个部分,并用取一个中间值,除去中间值外,其他的数值都是一一镜面对称相同。

如:

这就是单链表的回文结构 。

题目:

  • 判断单链表是否符合回文结构:
  • 对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。
  • 给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。

经典OJ题:单链表的回文结构_第1张图片

 题源:链表的回文结构_牛客题霸_牛客网 (nowcoder.com)

思路: 

想要判断一个链表是否是回文结构,我们第一个想到的就是对链表的另一半进行拆分,组建一个新的链表。

但是对于链表而言,回文结构的判断分为了两种情况,第一种,链表是奇数节点的链表,即链表的节点个数是奇数,第二种,链表是偶数节点,即链表的个数是偶数。

经典OJ题:单链表的回文结构_第2张图片

对于偶数节点的链表,对于链表的拆分并不会有多大的影响,而对于奇数而言,则会影响中间节点的归属问题和指向确认问题。

经典OJ题:单链表的回文结构_第3张图片

  • 如图所示,如果从中间节点进行拆分则会出现问题。 
  • 所以,我们直接在链表上进行修改,先使用快慢指针寻找道链表的节点,而后从链表的节点开始进行指向的修改,以中间节点为头节点,改变之后的节点指向。

经典OJ题:单链表的回文结构_第4张图片

而后,改变方向后,从原链表的最后一个节点进行比对。

代码演示:

经典OJ题:单链表的回文结构_第5张图片 

参考代码:

寻找中间节点:单链表经典OJ题:找出链表的中间节点-CSDN博客

反转链表: 单链表经典OJ题:反转链表-CSDN博客

你可能感兴趣的:(数据结构,OJ题,C语言,算法,c语言,链表,数据结构,单链表)