书上看到的链表问题!!
实现remove()的一般做法也要利用remove_front()来处理特例即当一个或多个要被删除的项位于链表头的时候否则我们用两个指针来迭代链表一个指向前一个元素另一个
指向当前元素在迭代过程中找到要被删除的项并删除它然后再重新连接链表下面是
实现代码:
这里面哪个地方是连接啊,红色字的地方为小弟自己的理解不对请指出谢谢
int
ilist::
remove(int value)
{
ilist_item*plist=_at_front;
int elem_cnt=0;
while(plist&&plist->value()==value)//如果当前值就是要找的值
{
plist=plist->next();
remove_front();
++elem_cnt;
}
if(!plist)//如果链表为空
return elem_cnt;
ilist_item*prev=plist;
plist=plist->next();//plist指向下一个值
while(plist)//下一个值不为零
{
if(plist->value()==value)//plist所指的值是要找的值
{
prev->next(plist->next());//这是什么意思啊,好像这里还有指针问题
delete plist;
++elem_cnt;
bump_down_size();//--_size这后面开始就不知道是干什么用的了
plist=prev->next();
if(!plist)
{
_at_end=prev;
return elem_cnt;
}
}
else
{
prev=plist;
plist=plist->next();
}
}
return elem_cnt;
}
[此贴子已经被作者于2007-10-9 16:59:19编辑过]