【问题标题】:Compiler error recursion linked list编译器错误递归链表
【发布时间】:2015-01-17 20:01:04
【问题描述】:
int insert(node* head) {
    if (head == NULL) {
        node* temp = new node;
        if (head == NULL) {
            cout << "Error";
            return 0;
        }
        temp->data = 20;
        temp->next = NULL;
    } else {
        temp->next = insert(temp->next);
    }
    return (temp);
}

我正在尝试以递归方式添加节点,但出现错误temp was not declared。我不明白为什么会收到此错误。当我总是像这样定义temp node* temp = new node; 但现在我得到了一个错误。

【问题讨论】:

  • insert 返回一些东西真的没有意义。此外,您的返回类型是int,但您在return temp 中返回node*。只需将返回类型设为void。
  • @0x499602D2, std::list 的insert 返回插入元素的迭代器。

标签: c++ recursion linked-list nodes


【解决方案1】:

您的代码似乎存在多个问题:

int insert(node* head) { if (head == NULL) { node* temp = new node; // Newly created node will not be used at all if (head == NULL) { // as head is NULL it will return 0 cout << "Error"; return 0; } temp->data = 20; // Code unreachable temp->next = NULL; } else { temp->next = insert(temp->next); // Here you will again get an error for temp not declared } return (temp); }

【讨论】:

    【解决方案2】:

    局部变量仅在它们声明的范围内可见,并且您在第一个 if 语句中声明了 temp。您需要将定义移到if 子句之外:

    int insert(node* head)
    {
         node* temp=new node; // <- move to here
         if(head==NULL)
         {
              ...
         }
         else
         {
              ...
         }
         return temp;
    }
    

    【讨论】:

      猜你喜欢
      • 2015-05-30
      • 2014-04-28
      • 2011-05-03
      • 1970-01-01
      • 1970-01-01
      • 2014-02-26
      • 2020-05-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多