Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;:从链表中提取值_C++_Linked List - Fatal编程技术网

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;isize();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;