c++ - 从链表的开头删除节点

标签 c++ memory-management

我正在使用单向链表实现堆栈,其中 Head 位于堆栈顶部,Tail 位于堆栈底部。

我正在执行弹出操作。为此,我必须使头部等于链表中的第二个节点。但是在我这样做之前,我需要先删除链表中的第一个节点。我可以使用 delete head->next; 来做到这一点。

我的问题是,如果我删除了第一个节点,我还能用它移动到下一个节点吗?或者使用已调用 delete 的节点的引用是不好的做法。这是我想用来实现 pop 的代码。

delete head->next;
head->next = head->next->next;

最佳答案

如果你这样做:

删除head->next;

那么head->next是无效的。如果您尝试在下一行取消引用它(请记住右侧将在赋值之前计算),您的程序将会崩溃。

head->next = head->next->!next;//错误指针的取消引用发生在我放置 ! 的位置,而你在那里崩溃了。

如果你想删除 head->next 处的对象,你需要先将其保存。

p = head->next;
head->next = head->next->next;
delete p;

关于c++ - 从链表的开头删除节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31096830/

相关文章:

c++ - 'right way' 使用其他库分发应用程序

c - C appln 中的 dlopen 和 dlclose 内存管理

javascript - 实时图表使用d3内存逐渐增加?

iphone - (iphone)UIImage内存管理问题

c++ - 'if' 带有模板参数或 SFINAE 是首选?

c++ - 我应该如何在 VS 2012 中使用 Juce 框架将内容发送到输出窗口

c++ - "member function already defined or declared"- 这是什么意思?

c++ - std::map 成员函数指针?

c - 为什么 calloc 需要两个参数而 malloc 只需要一个参数?

c++ - 查找分配数据的未执行位