初學 C++ 時實現「利用棧與隊列判斷回文」是經典練習。原帖代碼在比較出棧與出隊元素時,因未在循環內更新判斷條件變量 e,導致 while(e==0) 永遠為真,陷入死循環。
e = S.empty();
while (e == 0) { // e 永不變化
p = S.pop();
d = Q.dequeue();
if (p != d) break;
// 缺少 e = S.empty();
}
e = S.empty();
while (e == 0) {
p = S.pop();
d = Q.dequeue();
if (p != d) break;
e = S.empty(); // 每次迭代更新棧狀態
}
pop()/dequeue() 中註釋掉的 delete 若不恢復,會導致節點內存未釋放。std::stack、std::queue 與智能指針,簡化資源管理。調試技巧:遇到死循環優先檢查循環條件變量是否在循環體內正確更新。