C++ C++;:从链表中提取值
当我多次调用C++ C++;:从链表中提取值,c++,linked-list,C++,Linked List,当我多次调用extractMin()时,此代码崩溃。我认为这应该是显而易见的 你们中的一些人认为问题在于函数,因为我是指针新手,可能是一个明显的bug。因此,只要知道它是一个链表就足够了,无需详细说明,函数应该使用isEmpty())抛出ErrorException(“空队列”); 串前=LEX_高; 细胞*旧; 对于(inti=0;isize();i++){ 如果(此->头部->值头部->值; 老=这个->头; } 老=这个->头; 本->头=本->头->下一步; } 对数大小--; 删除旧的
extractMin()
时,此代码崩溃。我认为这应该是显而易见的
你们中的一些人认为问题在于函数,因为我是指针新手,可能是一个明显的bug。因此,只要知道它是一个链表就足够了,无需详细说明,函数应该使用您的isEmpty())抛出ErrorException(“空队列”); 串前=LEX_高; 细胞*旧; 对于(inti=0;i
size();i++){ 如果(此->头部->值<前部){ 前端=此->头部->值; 老=这个->头; } 老=这个->头; 本->头=本->头->下一步; } 对数大小--; 删除旧的; 返回前线; } void LinkedListPQUE::排队(常量字符串和元素){ 单元格*新单元格=新单元格; newCell->value=elem; newCell->next=NULL; 如果(此->isEmpty()){ this->head=this->tail=newCell; logSize++; }否则{ recurSort(newCell); this->tail->next=newCell; 此->尾=新单元; logSize++; } }
头部会被修改,但在运行后不会重置
您应该简单地使用迭代器
,或者简单地添加一个从头开始的指针
,并移动该指针,而不是“破坏”列表的头您的头
会被修改,但在运行后不会重置
您应该简单地使用迭代器
,或者简单地添加一个从头开始的指针
,并移动该指针,而不是“打断”列表的头您在extractMin()
中修改头成员,这会导致列表被打断。您在extractMin()中修改头成员
,使列表处于中断状态。此循环存在问题:
for (int i = 0; i < this->size(); i++) {
if (this->head->value < front) {
front = this->head->value;
old = this->head;
}
old = this->head;
this->head = this->head->next;
}
不应该在循环中。函数逻辑应该更复杂一些——找到一个指向最小元素的指针,然后将其值与头交换,然后移除头 问题在于这个周期:
for (int i = 0; i < this->size(); i++) {
if (this->head->value < front) {
front = this->head->value;
old = this->head;
}
old = this->head;
this->head = this->head->next;
}
不应该在循环中。函数逻辑应该更复杂一些——找到一个指向最小元素的指针,然后将其值与头交换,然后移除头 要求人们发现代码中的错误是没有效率的。您应该使用调试器(或添加打印语句)来隔离问题,然后构造一个。为什么不使用STL?让人们发现代码中的错误是没有效率的。您应该使用调试器(或添加打印语句)来隔离问题,然后构造一个。为什么不使用STL?这不完全正确。问题是他正在用一种不正确的方式修改头部。否则,被提取的函数应该删除一个元素,因此也应该修改head。问题是他正在用一种不正确的方式修改头部。否则,正在提取的函数应该删除一个元素,因此也应该修改head。
old = this->head;
this->head = this->head->next;