資料結構 單鏈表的回文結構

2021-10-21 07:05:43 字數 1775 閱讀 9159

鍊錶的回文結構,即 1 --> 2 --> 3 --> 2 --> 1 這樣的形式,鍊錶正著和反過來是一樣的。

思路:1、將原鍊錶進行拷貝;

2、對拷貝的鍊錶進行逆置;

3、然後比較逆置之後的鍊錶和原鍊錶是否相同。

public

boolean

chkpalindrome

(listnode a)

// 2 先拷貝乙份原鍊錶,不破壞原來的鍊錶

listnode newhead =

newlistnode(0

);listnode newtail = newhead;

for(listnode node = a;node != null;node = node.next)

// 3 用三指標法,即 prev、cur、next 來逆置鍊錶

listnode prev = null;

listnode cur = newhead.next;

while

(cur != null)

listnode curreversea = prev;

// 4 比較逆置之後的鍊錶和原鍊錶是否相同

listnode cura = a;

while

(curreversea != null && cura != null)

else

}return

true

;}

思路:

1、不用新建立鍊錶,直接在原煉表上進行操作;

2、求得鍊錶的長度,然後讀取到一半的元素;

3、對一半的元素進行逆置;

4、然後將逆置後的半個鍊錶與剩下的未逆置的一半鍊錶進行比較。

private

static

intgetlength

(listnode head)

return length;

}public

static

boolean

chkpalindrome

(listnode a)

// 2、讀取到前半個鍊錶

int len =

getlength

(a);

int steps = len /2;

listnode b = a;

for(

int i =

0; i < steps; i++

)// 3、將這前半個鍊錶進行逆置

listnode prev = null;

listnode cur = b;

while

(cur != null)

b = prev;

// 4、比較逆置了的前半個鍊錶和未逆置的後半個鍊錶

listnode cur1 = a;

listnode cur2 = b;

while

(cur1 != null && cur2 != null)

cur1 = cur1.next;

cur2 = cur2.next;

}return

true

;}

注意:

鍊錶結點為奇數個和偶數個的時候,鍊錶的樣子是不一樣的,但是**是一致的。

偶數個時,因為 cur1 != null && cur2 != null 這個條件,只要乙個為null,迴圈就會結束了。

常見單鏈表題型(八)鍊錶的回文結構

對於乙個鍊錶,請設計乙個時間複雜度為o n 額外空間複雜度為o 1 的演算法,判斷其是否為回文結構。給定乙個鍊錶的頭指標a,請返回乙個bool值,代表其是否為回文結構。保證鍊錶長度小於等於900。示例 輸入 1 2 2 1 輸出 是 struct listnode 方法一 將鍊錶儲存在陣列裡,再首尾...

資料結構單鏈表

初學資料結構,貼段自己編寫的單鏈表程式,希望自己能夠一直以強大的學習熱情持續下去!自勉!2012年3月30日 於大連 include using namespace std typedef struct node linklist,node linklist makelist int n void ...

資料結構 單鏈表

今天浪費了好多時間,也許是心裡想著明天的考試吧 可自己也知道這次的考試,自己畢竟過不了了,只好等到今年11月份,想想那時自己已經大三了 還有那麼多時間嗎!很懊惱今天不知怎麼回事,感嘆環境真的可以影響乙個人,真的可以 把今天的學習筆記寫下來,沒有進行好好的整理,這回單鏈表的功能較多,操作比較散,最後乙...