堆栈链接列表中的弹出和推送功能

时间:2014-10-23 11:47:19

标签: c++ pointers linked-list stack

您好我已经创建了两个pop和push函数。问题是程序在pop函数后崩溃,我无法理解为什么。如果你能帮助我,我会很高兴。

Struct Node
{
  int num;
  Node *next;
};

void push(Node** top, int num)
{
 Node* tmp = *top;
 Node* newNode = new Node;
 newNode->num = num;
 *top = newNode;
 newNode->next = tmp;

}

int pop(Node* top)
{
 Node *poppedLink = top;
 top = poppedLink->next; 
 int ans = poppedLink->num; 
 delete poppedLink; 

 return ans;

}

1 个答案:

答案 0 :(得分:3)

删除节点但外部代码不知道这一点并继续使用旧指针“top”(已经死了)。你必须使用双指针作为输入参数,就像它在push()中发生的那样。

这样的事情(抱歉,我没有在编译器上测试它):

int pop(Node** top)
{
 Node *poppedLink = *top;
 *top = poppedLink->next; 
 int ans = poppedLink->num; 
 delete poppedLink; 

 return ans;
}