我正在尝试使用链接列表实现堆栈。我的程序不断崩溃,并且在尝试打印新的链接列表时,它会打印一个无符号整数。我的打印功能可以正常工作,因此下面是此功能。
请帮助。
void LinkedList::Push (int val)
{
Node* newHead = new Node;
Node* oldHead = new Node;
newHead->value = val;
oldHead = head;
head = newHead;
oldHead->prev = head;
head->next = oldHead;
delete newHead;
}
答案 0 :(得分:1)
一个问题是,您在Node
的定义中new
编辑过的oldHead
永远不会delete
d。由于您在创建后立即将oldHead
设置为head
,因此建议您将其定义为:
Node* oldHead = head;
主要问题是您delete
newHead
,现在是head
指向的对象。因此,当您打印head
时,您正在读取无效的数据。
我强烈建议您将资源处理工作留给std::shared_ptr
之类的对象,而不要new
自己和delete
自己。
答案 1 :(得分:1)
我不确定我是否理解你的问题。
您的固定方法:
void Push( const int val )
{
Node* newNode { new Node };
newNode->value = val;
newNode->next = head;
head = newNode;
}
详细了解链接列表操作here。您不需要双向链表即可实现堆栈-只需在一端推送/弹出。
[编辑]
我没有注意到您使用的是双向链接列表(这就是为什么需要完整/可验证的示例)的原因。如我所说,对于堆栈实现,单链列表就足够了。