原題描述
判斷一個鏈表是否爲迴文結構,要求額外空間複雜度爲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)
胡扯
看到這個題目,最開始我是崩潰的,經歷了一天四堂筆試的我,難受(技術渣,沒辦法)
注各位大佬早日找到工作,也祝我能夠運氣好點,沾沾大佬的喜氣 _
注:
若有錯誤,請指正。歡迎大佬提供更優秀的解法