我是这样实现这个函数的:
typedef node* List;
void DeleteFromPos(List &l, unsigned int p) {
List lAux = l;
unsigned int count = 1;
while (lAux) {
if (p == 1) {
while (l) {
List del = lAux;
lAux = lAux->next;
delete del;
del = NULL;
}
lAux = NULL;
} else if (count < p-1) {
lAux = lAux->next;
count++;
} else {
List del = lAux->next;
if (del) {
lAux->next = del->next;
delete del;
del = NULL;
} else
lAux = NULL;
}
}
}
问题是当p==1时,在这种特殊情况下,所有的元素都被删除了,但看起来l指针仍然存在于末尾。我需要一些关于这方面的建议。
编辑:有一些建议,p ==1的情况下有自己的循环,它的丑陋,但它的工作。
3条答案
按热度按时间f0ofjuux1#
通过模块化简化您的任务。首先有一个删除列表中所有元素的函数。
注解 *& -指向指针的引用。因此,函数修改头部参数。
然后有一个定位第n个元素的函数。当你有第n个节点时调用上面的函数。
如果你真的需要在一个单一的函数中完成这项工作,那么可以这样做:
我把细节留到你练习的时候再说。
eqqqjvef2#
我相信你通过引用传递了一个指向
node
的指针,这样如果你的列表的头部要被删除,你可以更新指针本身,这样调用者就可以看到这个变化。但你却做到了:这就抛弃了这种潜力。如果
p
等于1
,你应该这样做:zy1mlcev3#
指针l在你的函数中没有改变。你改变了指针1Aux,但l保持其原始值。