我有從列表中刪除選定節點的問題。任務是刪除包含用戶選擇的數據的所有節點並對它們進行計數。例如刪除包含3的所有節點並對它們進行計數。函數應該返回整數與已刪除節點的數量。我的函數彈出節點的代碼和彈出包括特定數據的所有節點都在這裏。我使用Visual Studio 2012和調試說一些指針指向空間。內存讀取失敗。有什麼問題?鏈接列表:使用所選數據刪除節點
void pop(Node * head, Node * pointer) //delete node with given pointer
{
Node * p = head;
if (pointer == head)
{
head = p->next;
delete p;
}
else
{
while(p->next != pointer)
{
p = p->next;
}
p->next = pointer->next;
delete pointer;
}
}
int pop_all(Node * head, float data_out) //delete all nodes with proper data
{
Node * p = head;
int counter = 0;
while(p->next != NULL)
{
if (p->data == data_out)
{
pop(head,p);
counter++;
}
else
{
p = p->next;
}
}
return counter;
}
很確定這應該被標記爲C. –
您的代碼在第一次通過時不會正確地檢查1個元素(p-> next == NULL)的列表。 –
請注意,通過pop_all()彈出一個元素一次後,您想要一個'p-> next',因爲現在刪除了完全相同的節點。 –