这就是我需要做的:append_data将一个节点添加到顶部指向的列表末尾。生成的列表长一个元素,并且新添加的节点具有给定的数据值。考虑使用"append"函数来提供帮助。void AppendData(int数据(;
append与append_data相同,只是我们添加了一个节点,而不是一个值。void Append(shared_ptr new_node(;我可以使用这段代码AppendData,但在理想的情况下,我可以通过AppendData传递Append,并获得相同的结果。我现在正在为Append而挣扎,尽管答案在AppendData代码中
''
void LinkedList::AppendData(int data){
shared_ptr<node> temp(new node);
temp->data = data;
temp->next = shared_ptr<node>(NULL);
shared_ptr<node> end_node(top_ptr_);
if(end_node == NULL) {
end_node=temp;
} else {
while(end_node->next!=NULL) {
end_node=end_node->next;
}
end_node->next=temp;
}
}
void LinkedList::Append(shared_ptr<node> new_node){}
''
在理想的情况下,我可以通过AppendData传递Append并获得相同的结果。
实际上,Append
的信息比AppendData
少,尤其是数据本身。以AppendData
创建一个节点,然后调用Append
将该节点附加到列表中的方式重构它会更有意义:
void LinkedList::AppendData(int data){
// construct node
shared_ptr<node> temp(new node);
temp->data = data;
temp->next = shared_ptr<node>(NULL);
// append it
Append(temp);
}
void LinkedList::Append(shared_ptr<node> new_node){
shared_ptr<node> end_node(top_ptr_);
if(end_node == NULL) {
end_node = new_node; // new_node instead of temp
} else {
while(end_node->next!=NULL) {
end_node=end_node->next;
}
end_node->next = new_node; // ditto
}
}
此外,此行end_node = new_node;
不正确。如果列表为空,则需要更新top_ptr_
,如下所示:
top_ptr_ = new_node;