我编写了一个递归双向链接 C++ 函数来删除双向链表中具有特定值的所有节点。是否可以对此进行优化?谢谢。
struct marynode {
int value;
marynode* next;
marynode* prev;
};
void DoubleLinkedListDeleteMultiple(marynode*& llist, int value){
marynode* tmp = llist;
if (llist == NULL)
return;
if (llist->value == value){
DoubleLinkedListDeleteMultiple(llist->next, value);
if (llist->next == NULL){
marynode* prev = llist->prev;
delete llist;
llist = NULL;
llist = prev;
if (llist)
llist->next = 0;
}
else if (llist->prev == NULL){
marynode* next = llist->next;
delete llist;
llist = NULL;
llist = next;
if (llist)
llist->prev = 0;
}
else{
marynode *x = llist;
marynode *mynext = x->next;
while (x){
if (x->value == value){
marynode* clara = x->next;
marynode* zprev = x->prev;
delete x;
x = NULL;
x = clara;
llist = clara;
if (llist)
llist->prev = zprev;
}
else {
x = mynext;
}
if (mynext){
mynext = mynext->next;
}
}
}
}
else{
DoubleLinkedListDeleteMultiple(llist->next, value);
}
}
最佳答案
std::list 有问题吗?
此外,结构 + 全局函数?您可能想改用面向对象的结构,例如成员方法。
为了稍微优化此特定代码,我会将您的递归调用更改为 while 循环。
while(llist != NULL) {
if(llist->value == value) {
if(llist->prev) {
llist->prev->next = llist->next;
}
if(llist->next) {
llist->next->prev = llist->prev;
}
node* next = llist->next;
delete llist;
llist = next;
} else {
llist = llist->next;
}
}
关于c++ - 多次优化递归双链表删除节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6794731/