链接列表数据编辑删除整个列表

时间:2015-05-24 00:23:21

标签: c++ linked-list

我的班级要求的程序能够插入项目(此任务正在运行)并对其进行评估。问题是当我尝试进行评估时,程序只是删除整个列表,我不知道为什么。这是评估功能:

No * evaluate(No * head){
    int projectID;

    cout<<"What is the ID?\n";
    cin >> projectID;

    while (head != NULL)
    {
        if (head->ID == projectID){
            int evaluation;
            cout<<"Please insert the evaluation \n";
            cin >> evaluation;
            head->evaluation = evaluation;
        }
        head = head->next;
    }

    return head;
}

这是我的结构:

typedef struct dados {
    int ID;
    int evaluation;
    struct dados *next; //pointer to next node
}No;

要调用我使用的功能:

int main(){
    No * ll = NULL;

    while (true){
        int ID;
        cout << "Please insert the ID \n";
        cin >> ID;

        ll = insertFront(id);
        ll = evaluate(head);
    }
}

1 个答案:

答案 0 :(得分:0)

您的问题:

问题是你在评估函数中执行while循环,直到head达到NULL:

while (head != NULL)

然后,在退出while循环后返回评估函数(因此head现在为NULL)并返回head:

   return head;   // <== will always return NULL 

最后你在main中的列表指针中设置它:

    ll = evaluate(head);  // ll will be null

解决方案:

如果evaluate()返回指向列表的指针或指向找到的节点的指针,那么我并不完全清楚。

如果找到了节点,最简单的方法是在您更新节点后立即从该功能返回:

   ... 
   if (head->ID == projectID){
      ... (as before) 
      return head;   <<=== add this line 
   }

如果它位于列表的开头,那么您只需要在函数开头的临时值中保存head,并返回此临时变量而不是{{1} }。

head