c++ - 删除链表末尾的节点C++

标签 c++ linked-list stack

希望你到目前为止过得愉快,我正在尝试使用链表实现堆栈,而且我非常知道如何在列表末尾插入一个项目。我正在尝试删除列表末尾的节点,但无法正确执行。

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,然后你试图删除它。所以你实际上是在删除……什么都没有。

  1. 检查 temp1 是否不为 NULL
  2. 检查 temp1->next 是否不为 NULL
  3. 检查 temp2 是否不为 NULL
  4. 如果 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/

相关文章:

c++ - 为什么我在 TreeView 控件中没有获得复选框单击事件?

c++ - openmpi mpmd 获取通信大小

java - Java中的反向链表问题

c - C中的堆栈代码一运行就崩溃并停止工作

c++ - 这是为成员函数的 C++ 模板部分特化构造类的好方法吗?

c++ - 决定返回什么 - boolean 值

c - 程序没有打印我需要打印的内容

C双向链表程序

java - 堆栈无法使用 pop 会出现错误

c - 将寄存器转储到堆栈中以进行保守的堆栈扫描