我有此链接列表。我唯一的问题在于此删除功能。我尝试空运行它,但无法正确解决。请有人解释
void list::remove(int v)
{
node *temp, *pre;
temp = head;
if(temp->data==v)
{
head = temp->next;
delete temp;
cout << endl << v << "has been deleted" <<endl;
return;
}
pre = temp;
while(temp!=0)
{
if(temp->data==v)
{
pre->next = temp->next;
delete temp;
cout << "\nValue deleted" <<endl;
return;
}
pre = temp;
temp = temp->next;
}
cout << endl << v << "not found" <<endl;
}
int main()
{
list l;
l.insert(8);
l.insert(9);
l.insert(10);
l.display();
cout << "After deleting" <<endl;
l.remove(9);
l.display();
}
答案 0 :(得分:0)
乍一看,该代码似乎是正确的。快速解释一下:您正在制作两个节点指针,一个指向列表上的当前元素,另一个指向上一个。第一种情况是您要删除的元素在列表的开头(因此是head),在这种情况下,您将head移到下一个元素(head = temp-> next)并删除了该节点。另一种情况是该元素在列表中的某处。使用while循环浏览列表(pre = temp,temp = temp-> next将您移至下一个元素),并使用if条件检查该元素是否为您要查找的元素。