C++ 从链表中获取最小值?

C++ 从链表中获取最小值?,c++,C++,我目前正在编写一段代码,它循环遍历一个链表并检索最小的,但不起作用。相反,它似乎返回了我在列表中输入的最后一个值。。。 (列表是从main传递的头) inti=0; 股票*节点=列表; int tempmesminate=(list+0)->itemStock; while(节点!=NULL) { 如果((列表+i)->itemStockitemStock; node=node->nodeptr; } i++; } 退货清单; 谢谢你的建议 由于某种原因,您正在对每个访问的节点取消引用(lis

我目前正在编写一段代码,它循环遍历一个链表并检索最小的,但不起作用。相反,它似乎返回了我在列表中输入的最后一个值。。。 (列表是从main传递的头)

inti=0;
股票*节点=列表;
int tempmesminate=(list+0)->itemStock;
while(节点!=NULL)
{
如果((列表+i)->itemStockitemStock;
node=node->nodeptr;
}
i++;
}
退货清单;

谢谢你的建议

由于某种原因,您正在对每个访问的节点取消引用
(list+i)
,并增加
i
。我不知道你为什么这么做,但这是错误的。基本上,您可以遍历链表,也可以在概念上遍历数组(根本不存在)。这是未定义的行为,无法给出有意义的结果

您必须取消引用当前有效的节点,而不是在RAM中某个位置后面有几个索引的数组元素,并通过列表的下一个节点指针前进(我假设这在代码中称为
nodeptr

类似于

Stock *node = list; // hopefully not NULL since I don't check in the next line
int smallest = node->itemStock;

while(node && node = node->nodeptr)
    smallest = std::min(smallest, node->itemStock);

return smallest;
这将是节点的结构。 然后在初始化它们时,应该将最后添加的节点的下一个指针引用到当前正在添加的节点。 然后代码将如下所示:

stock *node = head; // the head you passed from main
int min = node->price;
for(;node;node=node->next)
{
    if(node->price < min)
        min = node->price;
    if(!node->next)
        break();
}
return min;
stock*node=head;//你从main传来的头
int min=节点->价格;
对于(;节点;节点=节点->下一步)
{
如果(节点->价格价格;
如果(!节点->下一步)
break();
}
返回最小值;

返回值
,否?此外,为什么要用
list+i
迭代列表?在向列表添加索引时,这是列表还是数组?使用
std::list
可以使用您拥有的
std::min_元素
,并且链接列表和链接列表没有连续的内存分配。尝试使用列表->下一步进行迭代。此代码很危险。你很幸运没有得到任何
segfault
。事实上,如果他有一个segfault,我会说他会更幸运。
struct stock{
    stock *next;
    ...
};
stock *node = head; // the head you passed from main
int min = node->price;
for(;node;node=node->next)
{
    if(node->price < min)
        min = node->price;
    if(!node->next)
        break();
}
return min;