所以这与家庭作业有关,但我不打算把它丢弃。我真的想学习c ++,由于某种原因,我只是在节点维护上很慢。我的问题与检查链表是否为空有关。
我有这个开头的代码:
void add_node(node*& head_ptr, const int& payload)
{
node* my_first_node = new node();
my_first_node->data = payload;
my_first_node->next = nullptr;
}
在头文件
中struct node {
int data;
node* next;
};
我想知道我是否应该在添加函数之前执行while循环,或者作为其中的一部分?我只是把这部分放在了一边,但是我确信一旦发生这种情况我就会得到它。
谢谢!
答案 0 :(得分:1)
因此,如果您只有头指针,那么您需要遍历它直到结束节点。
首先,您应该检查head_ptr
是否存在。
if (head_ptr == nullptr)
// assign your first node to the head pointer
否则你需要到达列表的末尾。由于这是功课,一些伪代码怎么样。
make a node of interest, call it end_node
while we are not at the end //How can we tell if we are at the end (hint you assign the
// next in your add already check for this)
move to the next node (interest_node = interest_node->next)
end
现在我们位于结束节点,因此您可以在最后添加新节点。
提示(您可能需要检查损坏的链接列表,即。循环链接。
答案 1 :(得分:0)
我认为你需要像
这样的东西head_ptr->next = my_first_node;
内部" add_node"功能
这将使你的head_ptr添加一个真实的"新节点。
和您的问题(在add_node之前循环)
只做像
这样的事情while(head_ptr != nullptr){
... //your code (maybe you can backup the last node in here?)
// write code for head ptr = next node
}
但请记住备份你的"真实"在分配" next"之前head_ptr;到你的head_ptr。
否则你无法取回