You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改队列头部插入代码,使新元素添加至已插入头部元素之后?

看起来你想实现的是——往队列头部添加元素时,新元素不是直接插到最前面,而是排在之前插入的头部元素的后面,对吧?比如第一次插X,队列变成[X, 原队列];第二次插Y,队列变成[X, Y, 原队列],而不是[Y, X, 原队列]。

你原来的代码每次都把新节点设为新的head,所以新元素永远抢占最前面的位置,这就是问题所在。要解决这个,我们需要跟踪最后一个插入到头部的元素,这样每次新元素都能接在它后面。

修改步骤:

  1. 给Queue类添加一个成员变量
    我们需要一个指针来记录头部插入链的最后一个节点,比如叫frontChainTail。在类定义里添加它,并在构造函数中初始化为NULL:

    class Queue {
    private:
        Node* head;
        Node* frontChainTail; // 新增:跟踪头部插入链的末尾
        // 其他私有成员...
    public:
        Queue() : head(NULL), frontChainTail(NULL) {} // 初始化两个指针
        // 其他成员函数...
        void addtoFront(string first, string last);
    };
    
  2. 修改addtoFront函数
    根据是否是第一次插入头部元素,分两种情况处理:

    void Queue::addtoFront(string first, string last){
        Node *temp = new Node(first, last, NULL);
        
        if (frontChainTail == NULL) {
            // 第一次插入头部元素:把新节点连到原队列头部,更新head
            temp->next = head;
            head = temp;
            // 记录这个节点为头部链的末尾,下次插在它后面
            frontChainTail = temp;
        } else {
            // 非第一次插入:把新节点接在头部链的末尾,同时让新节点连到原队列的起始位置
            temp->next = frontChainTail->next;
            frontChainTail->next = temp;
            // 更新头部链的末尾为新节点
            frontChainTail = temp;
        }
    }
    

效果说明:

  • 假设原队列是[A, B, C](head指向A)
  • 第一次调用addtoFront("X", "X"):队列变成[X, A, B, C],frontChainTail指向X
  • 第二次调用addtoFront("Y", "Y"):队列变成[X, Y, A, B, C],frontChainTail指向Y
  • 第三次调用addtoFront("Z", "Z"):队列变成[X, Y, Z, A, B, C],完全符合你的需求!

如果队列为空的情况也能正常处理:第一次插入后队列是[X],第二次插入变成[X, Y],以此类推。

内容的提问来源于stack exchange,提问作者Angad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:59:32