想知道为什么这只会删除节点#2

时间:2018-12-06 12:02:20

标签: c++

当前,该程序将只删除节点#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;
        }
    }

}

1 个答案:

答案 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; }

(但请不要。)