我正在尝试使用链表在C ++中实现一个简单的堆栈,但我完全被PUSH()函数难倒。我整晚都在努力工作,这几乎让我疯狂。它应该在堆栈的顶部插入一个元素,但是我试图实现的每一种方式都存在问题。我的相关代码的摘录如下:
template <typename T>
struct NODE{
T data;
NODE<T> *next;
}
template <typename T>
void PUSH(T x, NODE<T> *S){
NODE<T> *tmp = new NODE<T>;
tmp->data = x;
tmp->next = S;
S = tmp;
}
int main(){
NODE<int> *test = new NODE<int>;
test->data = 111;
test->next = NULL;
PUSH(99, test);
PUSH(88, test);
std::cout << test->data << std::endl;
}
我希望最后一行打印88,但它打印111.当我尝试访问下一个元素时,我得到一个段错误,所以我必须做错了。也许我只是累了,但希望你们中的一个能够对我搞砸的地方有所启发,这对我来说似乎是正确的。
答案 0 :(得分:1)
void PUSH(T x, NODE<T> *S)
{
}
您按值传递S
,因此您在S
内对PUSH
所做的任何更改都不会在外部显示。即使您要向堆栈添加元素,但是top仍然是第一个节点(111)。
您可以将指针传递给指向S
的指针或指向S
void PUSH(T x, NODE<T> **S)
{
NODE<T> *tmp = new NODE<T>;
tmp->data = x;
tmp->next = *S;
*S = tmp;
}