鍊錶回文結構判斷較簡單的做法是利用棧儲存鍊錶逆序序列,之後與列表正序序列 比較,如果一致,則說明是回文結構;這樣時間複雜度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 ...