您好我想编写堆栈实现,遗憾的是出了问题
Node* head=0;
std::cout << "front insertion" << std::endl;
addBeg(head, 1);
std::cout<<head<<std::endl;
class Node
{public:
int value;
class Node *next_el;
Node(int value){ this->value=value;next_el=NULL;}
};
void addBeg(Node *head, int value){
head=new Node(value); //even that doesn't work!?
}
我真的很想知道为什么main中的“head”仍然是NULL值; 我做错了什么?
答案 0 :(得分:1)
您可以通过更改标题来解决这个问题,但这是不道德的:
void addBeg(Node * &head, int value){
head=new Node(value); // now it works
}
在代码中以相同的方式调用这两个版本。以这种方式改变一个函数(通过引用而不是按值来取一个参数)可能真的让用户感到高兴,但我想在这种情况下并不重要。
答案 1 :(得分:0)
如果你想编写自己的链表实现(而不仅仅是使用已经存在的内容,比如std :: list),我建议你首先看看链接列表在C中是如何工作的(不是C ++)。可以在此处找到教程,例如:http://www.codeproject.com/Articles/24684/How-to-create-Linked-list-using-C-C
一旦你在C中工作,你可以尝试在它周围编写一个C ++“包装器”作为类或模板。除此之外,你的问题不够准确,无法知道你的清单应该如何运作。
答案 2 :(得分:0)
您只在addBeg()函数内修改指针值,但是您想要更改变量的值。提醒我,当我有类似的问题,我的老师说“如果它不起作用,添加星号”
所以这是:
class Node
{public:
int value;
class Node *next_el;
Node(int value){ this->value=value;next_el=NULL;}
};
void addBeg(Node **head, int value){
*head=new Node(value); //even that doesn't work!?
}
Node* head=0;
std::cout << "front insertion" << std::endl;
addBeg(&head, 1);//notice &
std::cout<<head<<std::endl;
另一种解决方案是使用@ Beta的答案
中所示的参考