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

C++自定义insertAfter函数是否可将seat插入到driver_seat之后

代码问题分析与修复方案

1. insertAfter函数逻辑错误

当前的插入逻辑无法实现预期效果,原代码第二行等价于node->next_node = node->next_node,执行后没有任何实际修改:

void SeatNode::insertAfter(SeatNode* node)
{
    // 插入this节点到node之后
    this->next_node = node->next_node; // 该行逻辑正确,将当前节点的后继指向node原来的后继
    node->next_node = this->next_node; // 错误:此处应该指向当前节点this,而非this的后继
}

修正后的函数实现:

void SeatNode::insertAfter(SeatNode* node)
{
    this->next_node = node->next_node;
    node->next_node = this;
}

2. 局部对象生命周期问题

createSeatReservation中定义的SeatNode seat(p)是栈上的局部变量,函数执行结束后该对象会被自动销毁,即使插入逻辑正确,链表中保存的也会是野指针,触发未定义行为。需要改为堆分配对象延长生命周期:

// 注意:堆分配的节点需要手动管理释放,避免内存泄漏
void Compact::createSeatReservation(Passenger p)
{
    SeatNode* seat = new SeatNode(p);
    seat->insertAfter(&this->driver_seat);
}

3. 调用参数错误

你的需求是把新节点插到driver_seat之后,按照insertAfter的语义(将当前对象插入到参数节点的后面),你应该传入driver_seat的指针,而非driver_seat.getNextNode(),否则新节点会被插入到driver_seat原有后继节点的后面,无法实现driver_seat直接指向新节点的效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 18:00:04