1. 程式人生 > >【2019新浪&微博筆試題目】判斷連結串列是否為迴文結構,空間負責度為O(1),時間複雜度為O(n)

【2019新浪&微博筆試題目】判斷連結串列是否為迴文結構,空間負責度為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)

胡扯

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

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

注:

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