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



你好,我创建了两个函数pop和push。问题是程序在弹出功能后崩溃,我不知道为什么。如果你能帮我,我会很高兴的。

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;

}

您删除了节点,但外部代码没有意识到这一点,并继续使用指向"top"的旧指针(它已经死了)。您必须使用双指针作为输入参数,就像在push()中一样。

类似这样的东西(对不起,我没有在编译器上测试它):

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

相关内容

  • 没有找到相关文章