我今天早些时候在这个问题上发了一个问题,但这个问题非常有用,所以我现在提供更多细节。
我试图从链表中返回最大值,但它只返回我输入的第一个值?
结构:
struct Stock{
string itemName;
int itemStock; //100 crisps etc...
double individualItemCost;
double totalSockValue;
Stock* next;
};
如何调用该函数:
Stock * g = Largest(head, sizeOf);
cout << "Name: " << g->itemName << " Stock: " << g->itemStock << endl;
实际功能:
Stock* Largest(Stock*& list, int size)
{
Stock *current;
current = (list+0);// start_ptr;
int largestValue = 0;
if (current!=NULL)
{
while (current->next!=NULL)
{
if (current->itemStock < largestValue)
{
largestValue = current->itemStock;
current = current->next;
}
else
{
current = current->next;
}
}
}
return current;
}
它返回我输入的第一个值而不是最大值,任何建议都会有所帮助。
这就是我将其读入链接列表的方式,因此您知道:
while (i < sizeOf)
{
cout << "Please enter the students name: " << endl;
cin >> head->itemName;
cout << "Please enter the item stock: " << endl;
cin >> head->itemStock;
cout << "Please enter the item price: " << endl;
cin >> head->individualItemCost;
push(head,head->itemName, head->itemStock, head->individualItemCost); //Push back everything in head
i++;
}
谢谢!
答案 0 :(得分:1)
你的问题在于:
if (current->itemStock < largestValue)
{
largestValue = current->itemStock;
current = current->next;
}
else
{
current = current->next;
}
无论您的代码采用哪个分支,current
将始终设置为列表的下一个元素。由于您返回current
,您将返回列表的最后一个元素,无论找到的最大值是什么。
我不会用勺子喂你解决方案,但我会给你一个提示:你需要一个类型为Stock*
的额外变量,这个变量非常像变量largestValue
。
答案 1 :(得分:0)
您尝试返回最大值,然后测试值是否更小。您当前的代码如下所示:
if (current->itemStock < largestValue)
{
largestValue = current->itemStock;
// (...)
}
逻辑上等于“来自两个值,选择较小的值并将其设置为最大值”。
最重要的是,如果你只需要这个数字,你就会在整个列表中进行迭代而不记得哪个股票是最大的 - 返回largestValue
,而不是current
。