我已經開始學習C++,並且作爲第一個項目,我正在嘗試創建鏈接列表應用程序。迄今爲止,我還沒有對鏈表概念有過任何實際問題。無法將項目添加到循環中的鏈接列表中C++
到目前爲止,我已經有工作功能將項目添加到列表並打印它。在main()類中,我可以逐個添加項目,但是當我嘗試通過for或while循環添加多個項目時。
我有單獨的函數來創建一個項目,將其添加到(年初)名單:
ListItem createItem(int value)
{
ListItem x;
std::cout << &x;
x.value = value;
return x;
}
void addBeg(ListItem* &start, ListItem &item)
{
// Adding to an empty list
if (start == nullptr)
{
item.prev = &item;
item.next = &item;
}
else
{
std::cout << std::endl <<"X" &item;
item.prev = (*start).prev;
(*item.prev).next = &item;
item.next = start;
(*start).prev = &item;
}
start = &item;
}
我的main()函數如下:
int main(void)
{
using namespace std;
// List is empty at the beginning.
ListItem* start = nullptr;
printList(start);
// This doesn't work:
int i = 0;
while (i < 10)
{
ListItem a = createItem(i);
addBeg(start, a);
i++;
}
// This works:
addBeg(start, createItem(12));
addBeg(start, createItem(13));
addBeg(start, createItem(-42));
addBeg(start, createItem(1));
addBeg(start, createItem(-85));
printList(start);
return 0;
}
我不能似乎在爲什麼它不起作用。我曾經想過的一個原因是,ListItem a在每次迭代中都不會重置,但這對我沒有任何意義。任何幫助或想法表示讚賞。
鏈接列表使用*指針*。在循環中,您要添加本地作用域變量的地址,並且該地址在該循環範圍之外無效。 – crashmstr
[可以訪問局部變量的內存是否可以在其範圍之外訪問?](http://stackoverflow.com/questions/6441218/can-a-local-variables-memory-be-accessed-outside-its-scope) –
我沒有添加地址 - createItem返回一個ListItem對象。但即使我是,爲什麼它在單個addBeg()語句中工作得很好(在循環下面顯示)?在for循環中做什麼不同? –