C++双向链表实现问题:PushFront()方法如何获取当前头节点地址
问题核心
你定义的PushFront()是Element类的成员方法,当你用头指针pList->PushFront(&newE)调用该方法时,方法内部的this指针指向的就是当前的头节点,直接用this就能拿到你需要的当前头节点地址。
现有代码的问题
- 新节点创建时没必要先构造空
Data再赋值,直接把传入的d的ElementData传给构造函数即可,减少冗余操作 - 漏写了原头节点的
pPrev指针修改逻辑,双向链表插入头节点需要把原头的前驱指向新节点 - 最终返回值应为新的头节点
newElement,而非nullptr
修正后的PushFront实现
Element* Element::PushFront(Element* d) { // 直接用传入元素的Data构造新节点,省去冗余赋值 Element* newElement = new Element(d->ElementData); // this就是当前调用该方法的原头节点,赋值给新节点的后继 newElement->pNext = this; // 原头节点的前驱指向新节点 this->pPrev = newElement; newElement->pPrev = NULL; // 返回新的头节点 return newElement; }
额外注意点
你主函数里的newE是栈上创建的对象,当前实现是把它的ElementData拷贝到堆上的newElement里,逻辑没有问题,不会出现栈内存释放后野指针的问题。如果后续改成交互直接存指针的逻辑,需要额外注意对象生命周期问题。
内容的提问来源于stack exchange,提问作者Kyle Close
相关产品推荐
相关产品推荐

