【2019新浪&微博筆試題目】判斷連結串列是否為迴文結構,空間負責度為O(1),時間複雜度為O(n)
阿新 • • 發佈:2018-12-10
原題描述
判斷一個連結串列是否為迴文結構,要求額外空間複雜度為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)
胡扯
看到這個題目,最開始我是崩潰的,經歷了一天四堂筆試的我,難受(技術渣,沒辦法)
注各位大佬早日找到工作,也祝我能夠運氣好點,沾沾大佬的喜氣 ^_^
注:
若有錯誤,請指正。歡迎大佬提供更優秀的解法