C++ 双链表。分段错误
我的任务是删除奇数块。 例如: 0-4-5-7-9-10到0-4-10。 为了实现这一点,我编写了以下函数:C++ 双链表。分段错误,c++,doubly-linked-list,C++,Doubly Linked List,我的任务是删除奇数块。 例如: 0-4-5-7-9-10到0-4-10。 为了实现这一点,我编写了以下函数: void delete_odd_el(Tsnum *&Start) { Tsnum *wp, *pp, *del_el; wp = Start; while(wp != nullptr) { if(wp->num % 2 == 1) { while(wp!=nullptr) {
void delete_odd_el(Tsnum *&Start)
{
Tsnum *wp, *pp, *del_el;
wp = Start;
while(wp != nullptr)
{
if(wp->num % 2 == 1)
{
while(wp!=nullptr)
{
if(wp->num % 2 == 0) break;
del_el = wp;
wp = wp->next;
wp->prev = del_el->prev;
delete del_el;
}
}
wp = wp->next;
}
}
但是当我运行它的时候,我得到了一个错误。知道如何解决这个问题吗?如果这对你有帮助,大家:
void delete_odd_el(Tsnum *&Start)
{
Tsnum *wp;
wp = Start;
while(wp!= nullptr)
{
if(wp->num % 2 ==1 && wp->next !=nullptr && wp->next->num % 2 == 1)
{
while(wp != nullptr && wp->num % 2 == 1)
{
if(wp->prev !=nullptr)
{
wp = wp->prev;
if(wp->next->next != nullptr)
{
wp->next = wp->next->next;
delete wp->next->prev;
wp->next->prev = wp;
}
else
{
delete wp->next;
wp->next = nullptr;
}
wp = wp->next;
}
else
{
if(wp->next != nullptr)
{
wp = wp->next;
delete wp->prev;
wp->prev = nullptr;
Start = wp;
}
else
{
delete wp;
wp = nullptr;
Start = wp;
}
}
}
}
else
wp = wp->next;
}
}
这种方法似乎很奇怪。您尝试执行的操作与在看到奇数节点时一次只处理一个节点之间有什么区别?为了确保这是一个可验证的示例,您不应该使用Tsnum之类的非标准类型。同意Ryan的意见,内部循环看起来…奇怪。在我看来,问题是您需要在
delete del_el
之前执行wp->prev->next=wp
,否则下一个指针将永远不会更新。如果跳过一次,则需要删除奇数块