【发布时间】:2021-11-18 01:40:57
【问题描述】:
我已经获得了实现双向链表的框架。我对 PushFront() 方法感到困惑。该方法应将提供的元素添加到链表的前面,并将地址返回给新的头节点。我对如何访问列表的当前头部感到困惑,所以我可以将它分配给 pNext 指针。 PushFront() 方法目前看起来是这样的:
Element* Element::PushFront(Element* d){
Element* newElement = new Element(Data()); // Allocate space for new element
newElement->ElementData = d->ElementData; // Assign ElementData to the new element
newElement->pNext = // Head address
newElement->pPrev = NULL;
return nullptr;
}
元素类构造函数:
Element::Element(Data d){
ElementData = d;
pNext = NULL;
pPrev = NULL;
}
数据类:
Data::Data(){
Name = "Unknown";
SN = 0;
Program = "Unknown";
}
Data::Data(string NameStr, unsigned int sNumber, string Prog) :
Name(NameStr), SN(sNumber), Program(Prog) {};
主要:
Element* pList = new Element(Data("Cam", 12345, "Testing1"));
Element newE(Data("Bob", 335567, "Testing2"));
pList = pList->PushFront(&newE);
我的理解是,您通常会在调用 PushFront() 时提供头部的地址,但是由于没有提供我不确定如何访问它。
【问题讨论】:
-
Rubber Duckie 想知道您打算使用
Element* d做什么。只是为了从中获取数据?它必须有更好的用途,否则您只需传递数据。 -
pList是列表的头部。在PushFront方法中,pList被称为this。 -
@user3386109 谢谢。这是我的不理解。
-
我认为您将链接列表与列表中的链接混为一谈。
Element看起来应该是一个链接。它不应该知道什么是头,因为链接应该知道的唯一事情是它附加到的其他链接以及它包含的数据。一个链接可能是一个头,但它不应该知道这一点。头部是只有链表应该知道的细节。与PushFront类似。链接不应该有前面。它只有一个prev和next,所以可能是一个insert_before和一个insert_after。有前面的链表。 -
有时我内心的小丑会努力出来......所以我很抱歉这句话:类的名称是“leaky c++ 101”吗? :) 如果将
Element*p传递到PushFront(),那么你也可以在main 中写:... Element (Data("Cam", 12345, "Testing1"));然后传递自动变量的地址。这反过来又会导致破坏、移除等几乎不可能实现:)
标签: c++ linked-list doubly-linked-list function-definition