合并列表上的排序

时间:2018-07-07 00:19:20

标签: c++

谁能用和告诉我这两个代码段之间的区别    没有返回声明?会有什么效果?

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时,它将返回一个节点,但我想弄清楚第二段中是否可能发生与第一段相同的事情? –

1 个答案:

答案 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++