首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

双链表删除有有关问题,请高手指教

2013-01-18 
双链表删除有问题,请高手指教void Manage::Delete() //删除人员 { Person *p1int count0char Name[20]

双链表删除有问题,请高手指教
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";

热点排行