搜索链接列表是否为空

时间:2014-09-23 02:43:09

标签: c++ nodes

所以这与家庭作业有关,但我不打算把它丢弃。我真的想学习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循环,或者作为其中的一部分?我只是把这部分放在了一边,但是我确信一旦发生这种情况我就会得到它。

谢谢!

2 个答案:

答案 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。

否则你无法取回