判断链表是否为回文结构,空间负责度为O(1),时间复杂度为O(n)

原题描述

判断一个链表是否为回文结构,要求额外空间复杂度为O(1),时间复杂度为O(n)

解题思路

一、双向链表

如果链表是双向链表,那简直不要太完美。直接从链表两端向中间遍历即可判定

可惜,这个题目肯定不会说的是这种情况,不过还是写上吧 _

二、单向链表

这才是真正的考点所在哟。

1、申请一个指针,从表头遍历至链表中间位置
2、将原链表后半部分进行指针指向倒置,比如a->b->c变换为c->b->a(倒置思路见后文)
3、然后类似于双向链表一样进行遍历判定是否为回文结构即可

链表指针指向倒置思路(以a->b->c->d->e为例):

1、申请指针 x,y,z
2、从a节点开始遍历,将其a,b,c分别赋值给x,y,z(x=a, y=b, z=c)
3、将b指向a,此时即可得到两个链表结构(b->a, c->d->e)
4、重复操作,将c指向b,得到c->b->a, d->e两个链表,直到所有指针都进行了指向倒置

大功告成

复杂度分析

空间复杂度:

需要额外的四个指针(x,y,z 和指向原链表前半部分的头结点指针),则空间消耗为O(1)

时间复杂度:

倒置指针指向需要遍历一遍链表,判断是否回文结构需要遍历一次两个长度分别n/2或n/2+1的链表,即时间复杂度为O(n)+O(n/2)+O(n/2+1) 即为O(2n),即为O(n)

胡扯

看到这个题目,最开始我是崩溃的,经历了一天四堂笔试的我,难受(技术渣,没办法)

注各位大佬早日找到工作,也祝我能够运气好点,沾沾大佬的喜气 _

注:

若有错误,请指正。欢迎大佬提供更优秀的解法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章