假設我有有一個char項的鏈接列表,我需要找到如果該鏈接列表中的字符是否是迴文。我知道鏈表並不是一個合適的結構,但是如果我們有一個該怎麼做?
如a-b-c-b-a
一個雙向鏈表是容易的,我們可以用頭部和尾部開始的
ptrh=head ptrt=tail
if(ptrh->item==ptrt->item)
和
ptrh->ptrh->frwdlink
ptrt->ptrt->bcklink
但是,如果我們有一個單鏈表?那麼如何實現呢?
假設我有有一個char項的鏈接列表,我需要找到如果該鏈接列表中的字符是否是迴文。我知道鏈表並不是一個合適的結構,但是如果我們有一個該怎麼做?
如a-b-c-b-a
一個雙向鏈表是容易的,我們可以用頭部和尾部開始的
ptrh=head ptrt=tail
if(ptrh->item==ptrt->item)
和
ptrh->ptrh->frwdlink
ptrt->ptrt->bcklink
但是,如果我們有一個單鏈表?那麼如何實現呢?
知道列表的大小,你可以告訴中間是什麼。然後當你經過時,只需將所有的字符緩存到中間,並確保它們在中間後以相反的順序出現。
您可以在第一次瀏覽列表時按照節點的相反順序構建一個列表。
,然後比較前n /原來的2 + 1個節點和反轉列表
可以創建臨時數組?將鏈表中的所有項目放入數組中,然後比較索引n和索引(長度 - n)。
var ptr = head; var array = [];
while (ptr != null)
{
array.push(ptr.item);
ptr = ptr.next;
}
for (var i = 0; i < array.length/2; i++)
{
if (array[i] != array[array.length - i])
return (false);
}
return (true);
...並且不要忘記考慮奇數長度的數組。 – 2012-08-10 23:19:46
您可以從編輯您的問題開始,刪除所有上限。你不需要在這裏喊,你看......人們可以閱讀。如果您想突出顯示某些內容,請使用粗體或類似的東西。 – Aftnix 2012-08-10 23:11:51
@Annix什麼?你說什麼? – 2012-08-10 23:14:25