希望你到目前为止过得愉快,我正在尝试使用链表实现堆栈,而且我非常知道如何在列表末尾插入一个项目。我正在尝试删除列表末尾的节点,但无法正确执行。
void Pop(){
Node* temp1 = head;
Node* temp2 = NULL;
while(temp1 != NULL){
temp2 = temp1;
temp1 = temp1->next;
}
delete temp1;
temp2->next = NULL;
}
那是我删除列表末尾节点的代码。我玩了很多,但这并没有使程序停止执行或无限打印数字。
所以我“推”了 3 个数字,并在每次“推”和“弹出”之间打印了两次,并在两者之间打印了结果。但是输出是这样的:
1
1 2
1 2 3
1 2 3
1 2 3
我希望发生的是:
1
1 2
1 2 3
1 2
1
提前致谢!:D
最佳答案
你的循环一直旋转直到 temp1
变成 NULL
,然后你试图删除它。所以你实际上是在删除……什么都没有。
- 检查
temp1
是否不为NULL
- 检查
temp1->next
是否不为NULL
- 检查
temp2
是否不为NULL
如果
temp1 == head
,则将head
设置为NULL
void Pop(void) { Node *t = head, *p = NULL; if (t == NULL) { return; } while (t->next != NULL) { p = t; t = t->next; } delete t; if (p != NULL) { p->next = NULL; } else { head = NULL; } }
关于c++ - 删除链表末尾的节点C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31607970/