当前,该程序将只删除节点#1(从第一个if语句中删除)和节点#2,但不会删除节点#2。想知道我做错了什么吗?
void removeMovie(myMovies *& firstMoviePtr, int removeNode)
{
int index = 1;
myMovies *temp;
myMovies *prev;
myMovies *nextNode=0;
if (removeNode==1) {
firstMoviePtr = firstMoviePtr->next;
}
else {
for (prev = firstMoviePtr; prev; prev = prev->next)
{
if (index == removeNode )
{
nextNode = prev->next;
break;
}
else { index++; }
}
for (myMovies * nodePtr = firstMoviePtr; nodePtr; nodePtr = nodePtr->next)
{
if (nodePtr->next == prev)nodePtr->next = nextNode; break;
}
}
}
答案 0 :(得分:1)
您写道:
if (nodePtr->next == prev)nodePtr->next = nextNode; break;
可以用如下格式重写它:
if (nodePtr->next == prev)
nodePtr->next = nextNode;
break;
关键是您的循环将始终中断。在第一次迭代中。你不会再有第二个了。
如果要将两个语句都设为条件,请使用大括号({}
),如下所示:
if (nodePtr->next == prev)
{
nodePtr->next = nextNode;
break;
}
(免责声明:我尚未检查此逻辑对于您尝试实现的算法是否真的正确。)
或者,一行:
if (nodePtr->next == prev) { nodePtr->next = nextNode; break; }
(但请不要。)