双链表删除有问题,请高手指教
void Manage::Delete() //删除人员
{
Person *p1;
int count=0;
char Name[20];
char c;
p1=person;
cout<<"请输入要删除人的名字:"<<endl;
cin>>Name;
if(person)
{
while(p1)
{
if(strcmp(p1->Name,Name)==0)
{
count++;
Output(p1);
if(p1==person) //若要删除的结点是第一个结点
{
if(p1->next==NULL)
person=NULL;
else{
person=p1->next;
person->prior=NULL;
delete p1;
p1=person;
}
}
else //若要删除的结点是后续结点
{
p1->prior->next=p1->next;
p1->next->prior=p1->prior;
delete p1;
p1=p1->next;
}
cout<<"\t\t***删除成功***\n";
}
else
p1=p1->next;
}
if(count==0)
cout<<"查无此人 无法删除\n";
}
}
谁能看一下有什么错误
[解决办法]
else //若要删除的结点是后续结点
这个else里面的代码出错了,可以修改如下:
else //若要删除的结点是后续结点
{
Person *temp = p1->next;
p1->prior->next=p1->next;
p1->next->prior=p1->prior;
delete p1;
p1=temp;
}
cout<<"\t\t***删除成功***\n";
}
这样的话,删除就对了
[解决办法]
顶楼上,不过还有点问题,就是删除最后一个结点的时候。
else //若要删除的结点是后续结点
{
Person *p1_next=p1->next;//作为标记,防止delete p1之后找不到next
p1->prior->next=p1->next;
if(p1->next)//删除的不是尾结点
p1->next->prior=p1->prior;
delete p1;
p1=p1_next;
}
cout<<"\t\t***删除成功***\n";