【发布时间】:2014-10-15 23:57:03
【问题描述】:
所以这个问题可能有点奇怪,但在这里。
我遇到了一个函数问题,该函数在有序链表中搜索特定值并删除它遇到的第一个包含目标值的节点。我遇到的问题是,每当我传递一个不在链表上的值或试图通过运行它直到它返回 false 来删除目标值的所有副本时,它都会引发 Seg-fault(对于“未找到")。
我解决了这个问题,但我不太明白为什么我所做的更改解决了我遇到的问题,因为对我来说这些方法似乎是等效的。我已经在下面发布了“之前和之后”,我想知道是否更有经验的眼睛可以重温一遍,并解释为什么我所做的更改解决了我所描述的问题。
修复前:
bool deleteNode(Node *&headRef, int delVal)
{
Node *delPtr; // for use in deletion
Node *scan; // " "
Node *prev; // " "
if( headRef != nullptr ) {
if( headRef->data == delVal ) {
delPtr = headRef;
headRef = headRef->next;
delete delPtr;
} else {
scan = headRef->next;
prev = headRef;
while( scan != nullptr && scan->data != delVal ) {
scan = scan->next;
prev = prev->next;
}
if( scan->data == delVal ) {
delPtr = scan;
prev->next = delPtr->next;
delete delPtr;
} else return false;
}
}
return true;
}
之后(已标记更改):
bool deleteNode(Node *&headRef, int delVal)
{
Node *delPtr; // for use in deletion
Node *scan; // " "
Node *prev; // " "
if( headRef == nullptr ) // *CHANGE #1*
return false;
if( headRef->data == delVal ) {
delPtr = headRef;
headRef = headRef->next;
delete delPtr;
} else {
scan = headRef->next;
prev = headRef;
while( scan != nullptr && scan->data != delVal ) {
scan = scan->next;
prev = prev->next;
}
if( scan != nullptr ) { // *CHANGE #2*
delPtr = scan;
prev->next = delPtr->next;
delete delPtr;
} else return false;
}
return true;
}
非常感谢您的帮助。
【问题讨论】:
标签: c++ linked-list segmentation-fault delete-operator