将代码置于'if'语句的条件之间

时间:2011-03-18 17:39:36

标签: c++ linked-list logic

我目前有一个if语句,在函数内执行,看起来像这样,但是不能编译,虽然我知道这是因为我在条件2和3之间执行的代码。

我要做的是创建一个函数,将一个新节点插入到正确位置的整数排序链表中。这样做,我需要测试三个条件。首先是列表是否为空。如果是,则condition1满意并且一切都很好。第二个条件是列表中当前是否只有一个节点。如果是这种情况,那么condition2就会得到满足,而且一切都很好。

现在我们来解决这个问题。如果不满足前两个条件,则唯一的另一种可能性是列表包含至少两个节点。在这种情况下,需要初始化两个临时指针,一个指向Head,一个指向Head -> Next,以便跟踪列表中的当前位置,并便于将新节点插入清单。

使用condition2condition3之间的代码初始化这些代码。必须创建这些,因为condition3依赖于它们,但在condition1之前创建它们会导致分段错误。

有人可以告诉我如何实施这样的声明,或者甚至可能吗?我想保持代码尽可能简单,而我现在拥有的功能齐全的LinkedList :: Insert()函数是一堆if语句,我在查看一些代码时遇到了麻烦。

int NewElement;
Node *NewNode;
NewNode = new Node;
NewNode -> Element = NewElement;

Node *TempPrevious;
Node *TempNext;

    if (ListIsEmpty) // condition1
    {
        // some code
        return true;
    }

    else if (ListContainsOnlyOneNode) // condition2
    {
         // some code
         return false;
    }

    TempPrevious = Head;
    TempNext = Head -> Next;

    else if (NewNode -> Element > TempNext -> Element) // condition3
    {
          // some code
          return true;
    }

2 个答案:

答案 0 :(得分:6)

这......真的很容易。因为您return来自每个区块,所以根本不需要else

if (ListIsEmpty) // condition1
{
    // some code
    return true;
}

// you don't have anything that needs to happen here, but you *could*
// since if condition1 is met control leaves the function immediately

if (ListContainsOnlyOneNode) // condition2
{
     // some code
     return false;
}

// if either of the previous conditions are met, 
// control will never reach this point! So put whatever setup you need for 
// the final test here

TempPrevious = Head;
TempNext = Head -> Next;

if (NewNode -> Element > TempNext -> Element) // condition3
{
      // some code
      return true;
}

答案 1 :(得分:4)

删除最后一个else,我认为它可以随意使用。