鍊錶回文結構判斷

2021-07-10 03:56:34 字數 1140 閱讀 9471

鍊錶回文結構判斷較簡單的做法是利用棧儲存鍊錶逆序序列,之後與列表正序序列 比較,如果一致,則說明是回文結構;這樣時間複雜度o(n),空間複雜度o(n),下面這種方法時間複雜度o(n),空間複雜度o(1),其基本思路是把鍊錶右半部分反轉,然後同時從原始鍊錶的首尾同時向中間遍歷,比較每乙個位置對應的value,**如下:

struct listnode

;bool ispalindrome(listnode* head)

//找到中間節點

listnode* node0,*node1;

node0 = node1 = head;

while ( node1->m_pnext && node1->m_pnext->m_pnext )

//反轉右半部分鍊錶

node1 = node0->m_pnext;//右半部分的起始節點

node0->m_pnext = null;//中間node指向空 作為比較終止條件

listnode* pre = node0;

listnode* temp = null;

while ( node1 )

//儲存鍊錶尾節點 之後恢復鍊錶使用

listnode* tail = pre;

node0 = head;

//比較

bool res = true;

while ( pre && node0)

pre = pre->m_pnext;

node0 = node0->m_pnext;

}//恢復鍊錶

pre = null;

while ( tail )

return res;

}int main()

else

list[i].m_pnext = null;

}list[0].value = 1;

list[1].value = 2;

list[2].value = 3;

list[3].value = 3;

list[4].value = 2;

list[5].value = 2;

cout

return

1;}

鍊錶回文結構

對於乙個鍊錶,請設計乙個時間複雜度為o n 額外空間複雜度為o 1 的演算法,判斷其是否為回文結構。給定乙個鍊錶的頭指標head,請返回乙個bool值,代表其是否為回文結構。思路 實現 public class palindromelist 此時slow位於鍊錶中間,開始反轉鍊錶slow後面的部分 ...

鍊錶回文結構

對於乙個鍊錶,請設計乙個時間複雜度為o n 額外空間複雜度為o 1 的演算法,判斷其是否為回文結構。給定乙個鍊錶的頭指標a,請返回乙個bool值,代表其是否為回文結構。保證鍊錶長度小於等於900。測試樣例 1 2 2 1返回 true解題思路 1 找到鍊錶的中點,2 翻轉後半部分的鍊錶節點 3 依次...

判斷鍊錶是否為回文結構

給定乙個鍊錶的頭節點 head,請判斷該鍊錶是否為回文 正反結構相同 結構。如果鍊錶長度為 n,時間複雜度達到 o n 額外空間複雜度達到 o 1 參考 程式設計師 面試指南 放入棧,時間複雜度o n 空間複雜度o n bool ispalindrome1 node head while null ...