判斷鏈表是否爲迴文結構,空間負責度爲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)

胡扯

看到這個題目,最開始我是崩潰的,經歷了一天四堂筆試的我,難受(技術渣,沒辦法)

注各位大佬早日找到工作,也祝我能夠運氣好點,沾沾大佬的喜氣 _

注:

若有錯誤,請指正。歡迎大佬提供更優秀的解法

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