谁能用和告诉我这两个代码段之间的区别 没有返回声明?会有什么效果?
void mergeSort( struct Node** headRef )
{
if( ( *headRef == nullptr || (*headRef)->link == nullptr ) )
{
return
}
nodePtr leftPart ;
nodePtr rightPart ;
divideList( *headRef , &leftPart , &rightPart ) ;
mergeSort( &leftPart ) ;
mergeSort( &rightPart ) ;
*headRef = sortedMerge( leftPart , rightPart )
}
void mergeSort( struct Node** headRef )
{
if( ( *headRef != nullptr || (*headRef)->link != nullptr ) )
{
nodePtr leftPart ;
nodePtr rightPart ;
divideList( *headRef , &leftPart , &rightPart ) ;
mergeSort( &leftPart ) ;
mergeSort( &rightPart ) ;
*headRef = sortedMerge( leftPart , rightPart ) ;
}
}
在第一段中,我使用了return语句,当它的链接为null时,它将返回一个节点,但我想弄清楚第二段中是否可能发生与第一段相同的事情? –
答案 0 :(得分:2)
这两个代码块不一样。 为了使它们相同,第二行中的代码行
if( ( *headRef != nullptr || (*headRef)->link != nullptr ) )
应该是
if( ( *headRef != nullptr && (*headRef)->link != nullptr ) )
您想看一下德摩根定律,它将告诉您如何转弯
if (!(expression))
进入
if (a_different_expression)
基本上所有&&变成||,所有||变成&&,所有sub_expressions都变成!sub_expressions(或删除!),所有关系表达式都反转(> =变成<)。 参见DeMorgan's law and C++