-1
我試圖編寫一些代碼從圓形雙向鏈表中刪除一個節點。我已經寫了下面的函數,它主要作品:刪除一個圓形雙向鏈表中的節點
bool Circular::remove(int index)
{
if (head == NULL)
return false;
Node* current;
current = head;
if (index > 0)
{
for (int i = 0; i < index; i++)
{
current = current->next;
}
}
else if (index < 0)
{
for (int i = 0; i < abs(index); i++)
{
current = current->prev;
}
}
if (current == head)
{
head = current->next;
}
else if (current == tail)
{
tail = current->prev;
}
current->prev->next = current->next;
current->next->prev = current->prev;
return true;
}
我唯一的問題是,當我通過數字1到索引數量也不會刪除正確的值。相反,它總是刪除尾部。如果你認爲我的代碼在其他地方有問題,那麼我也會研究它。
通過鏈接列表工作的好方法是筆和紙。繪製節點。繪製所有的鏈接。一個接一個,並且一次只有一個地方沒有鏈接點,請將鏈接更改爲所需的配置。編碼你必須採取的步驟。還花一些時間學習使用系統的調試器。當您可以一行一行地觀看程序時,加快解決問題的時間。 – user4581301
你能給出一個顯示錯誤的完整測試用例嗎? – mindriot
另外,你的'remove'方法泄漏內存;它會丟棄指針但不會刪除該節點。 – mindriot