这是节点的设置方式:
struct Node {
Node *next;
Node *prev;
T datum;
};
这是我的代码
//MODIFIES: this
//EFFECTS: inserts i into the front of the list
void push_front(const T &datum)
{
Node newfirst = first; // set newnode to first
&first = &datum;
datum = newfirst;
}
Node *first; // points to first Node in list, or 0 if list is empty
Node *last; // points to last Node in list, or 0 if list is empty
出于某种原因,我认为这是对的。
答案 0 :(得分:1)
您似乎需要以下
//this is my code
//MODIFIES: this
//EFFECTS: inserts i into the front of the list
void push_front(const T &datum)
{
first = new Node { first, nullptr, datum };
if ( !last ) last = first;
}
如果您的编译器不支持new new的初始化列表,那么您可以编写
//this is my code
//MODIFIES: this
//EFFECTS: inserts i into the front of the list
void push_front(const T &datum)
{
Node *tmp = new Node();
tmp->datum = datum;
tmp->next = first;
first = tmp;
if ( !last ) last = first;
}
答案 1 :(得分:0)
您希望(i)创建具有有效内容的新节点,并且(ii)设置为列表的第一个节点。您可以在以下示例中执行此操作:
void push_front(const T &datum)
{
Node* newFirst = new Node; //construct new Node
newFirst->next = first; // set newFirst's next node
newFirst->datum = datum; //set the content
first = newFirst; //assign new first node;
}
这就像一幅素描;有关更多详细信息,您应该发布更多代码(例如在其中一条评论中提到)。
另外需要提及的是:我更倾向于使用unique_ptr
作为其中一个Node
指针,例如。
struct Node {
std::unique_ptr<Node> next;
Node *prev;
T datum;
};
这可以很容易地破坏列表(并且还避免使用现代C ++中经常推荐的new
命令。)