链接列表数据编辑删除整个列表
Linked list data edit deletes entire list
我的 class 正在寻求一个能够插入项目(此任务正在运行)并向他们提供评估的程序。问题是当我尝试给出评价时,程序只是删除了整个列表,我不知道为什么。这是评估函数:
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);
}
}
你的问题:
问题是您在评估函数中执行 while 循环,直到 head 达到 NULL:
while (head != NULL)
然后,您 return 在退出 while 循环后从您的评估函数(因此 head 现在为 NULL)并且您 return head:
return head; // <== will always return NULL
最后你在 main 的列表指针中设置了它:
ll = evaluate(head); // ll will be null
解决方法:
我不完全清楚 evaluate()
应该 return 指向列表的指针,还是指向找到的节点的指针。
如果是找到的节点,最简单的方法是在更新节点后立即从函数中 return:
...
if (head->ID == projectID){
... (as before)
return head; <<=== add this line
}
如果它在列表的开头,那么你只需要将 head
保存在一个临时变量中,在你的函数的开头,并且 return 这个临时变量而不是 head
。
No * evaluate(No * head)
{
No *tmp = head; // no new ! It's a pointer, just take the value of the head
... // as before
while (tmp != NULL)
{
if (tmp->ID == projectID){
int evaluation;
cout<<"Please insert the evaluation\n";
cin >> evaluation;
tmp->evaluation = evaluation;
return head; // We return the full list (head)
}
tmp = tmp->next;
}
cout <<"Project not found\n";
return head;
}
我的 class 正在寻求一个能够插入项目(此任务正在运行)并向他们提供评估的程序。问题是当我尝试给出评价时,程序只是删除了整个列表,我不知道为什么。这是评估函数:
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);
}
}
你的问题:
问题是您在评估函数中执行 while 循环,直到 head 达到 NULL:
while (head != NULL)
然后,您 return 在退出 while 循环后从您的评估函数(因此 head 现在为 NULL)并且您 return head:
return head; // <== will always return NULL
最后你在 main 的列表指针中设置了它:
ll = evaluate(head); // ll will be null
解决方法:
我不完全清楚 evaluate()
应该 return 指向列表的指针,还是指向找到的节点的指针。
如果是找到的节点,最简单的方法是在更新节点后立即从函数中 return:
...
if (head->ID == projectID){
... (as before)
return head; <<=== add this line
}
如果它在列表的开头,那么你只需要将 head
保存在一个临时变量中,在你的函数的开头,并且 return 这个临时变量而不是 head
。
No * evaluate(No * head)
{
No *tmp = head; // no new ! It's a pointer, just take the value of the head
... // as before
while (tmp != NULL)
{
if (tmp->ID == projectID){
int evaluation;
cout<<"Please insert the evaluation\n";
cin >> evaluation;
tmp->evaluation = evaluation;
return head; // We return the full list (head)
}
tmp = tmp->next;
}
cout <<"Project not found\n";
return head;
}