void delete_double (LN<T>*& l) {
if (l == nullptr)
return;
LN<T> *p = l;
while (p -> next != nullptr && p -> next -> next != nullptr)
{
if (p -> value == p -> next -> value) // the current value is equal to the next value in the linked list
{
if (p == l) // when the first two values are the same // not sure if it is correct
{
l = l -> next -> next;
}
else // Problem should be here
{
LN<T> *to_delete = p; // Also tried this (doesn't work)
p = p->next;
delete to_delete; // LN<T>* to_delete = p;
// LN<T>* to_delete2 = p -> next;
LN<T> *to_delete1 = p; // l = to_delete2 -> next;
p = p->next; // delete to_delete;
delete to_delete1; // delete to_delete2;
}
}
else
{
p = p-> next;
}
}
}
// Image below is my output
enter image description here如何刪除兩個項目連續在一個鏈表
嗨,我寫這將刪除兩個值連續在一個鏈表,如果這兩個值是相同的功能。當輸入類似於「1 - > 2 - > 3 - > 3 - > 4 - > nullptr」(輸出應該是1 - > 2 - > 4 - > nullptr)時,我的代碼似乎停止工作。它退出不會給我任何錯誤。我一行一行地進行調試,它只是突然退出並顯示「變量不可用」。
我猜這是問題,當我刪除p時,l指向垃圾,這會導致問題。所以我嘗試了一種不同的方式讓我指向to_delete - > next。但它仍然不起作用。
我已經嘗試了這麼多小時來修復它,調試甚至沒有幫助。有人可以幫忙嗎?非常感謝!
哦,我明白了。另外,當你刪除一個項目時,你需要修改它之前項目的下一個指針。 – perreal
你會刪除出現兩次的所有值嗎?還是隻有一對? –
@lykdog *並且調試甚至不會幫助* - 看起來像您應該首先在紙上使用數據和鏈接的框來完成此任務,然後再編寫任何代碼。然後,調試將只是看你的代碼違揹你在紙上的內容。 – PaulMcKenzie