【问题标题】:C++ Specific Node Linked List Deletion. Does the code make sense?C++ 特定节点链表删除。代码有意义吗?
【发布时间】:2017-01-02 17:16:59
【问题描述】:

我需要在传递值时删除一个甜点节点。我搜索链表,出现匹配,删除节点并返回 true。如果未找到值,则返回 false。

bool LinkedList::delNode(string flavor)
{
    Dessert *pointer1 = head;
    Dessert *ptrT;
    while (pointer1 != NULL) {
        if (pointer1->flavor != flavor) {
            ptrT = pointer1;
            pointer1 = pointer1->next;
        } else { 
            ptrT->next = pointer1->next;
            delete pointer1;
            return true; 
        // Should I add a break here ?
        } 
        else if(pointer1->next == NULL) { return false; } 
    }
}

我不完全确定这里的编码是否对所有可能的节点位置都有意义。

【问题讨论】:

  • 既然你问了,老实说,我可能会do this instead。不那么繁琐且容易出错(例如缺少return 值)。无论如何,不​​需要最后的 else-if,但是您缺少 return 语句。如果循环耗尽并且pointer1 达到 NULL,会发生什么情况。或者当你发送一个空列表(空头指针)时会发生什么?

标签: c++ linked-list


【解决方案1】:

一旦你从一个函数中return,就不会再执行任何语句,所以在return 之后添加break 不会有任何区别。

【讨论】:

    【解决方案2】:

    按正确顺序保留if/ else if/ else。此处的 lase else if 语句没有 if 语句。你可能会得到一个错误

    错误:'else' 没有前面的 'if'

     if (pointer1->flavor != flavor) {
         ptrT = pointer1;
         pointer1 = pointer1->next;
     } 
     else if (pointer1->next == NULL) { return false; } 
     else { 
        ptrT->next = pointer1->next;
        delete pointer1;
        return true; 
     } 
    

    【讨论】:

      【解决方案3】:

      你应该初始化ptrT指针,如果你的代码遇到else的情况(想想删除head节点,那么程序就会崩溃。

      bool LinkedList::delNode(string flavor)
      {
          Dessert *pointer1 = head;
          Dessert *ptrT = NULL;
          while (pointer1 != NULL) {
              if (pointer1->flavor != flavor) {
                  ptrT = pointer1;
                  pointer1 = pointer1->next;
              }
              else if(pointer1->next == NULL) {
                  return false;
              }
              else {
                  if (ptrT == NULL) {
                      head = pointer1->next;
                  }
                  else {
                      ptrT->next = pointer1->next;
                  }
                  delete pointer1;
                  return true;
              }
          }
          return false;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-02-23
        • 2019-05-10
        • 2021-07-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-26
        • 2018-09-02
        相关资源
        最近更新 更多