随意编辑标题,engrish有时会混淆而不是帮助。
我必须制作(,不,我不能改变,这是它必须的方式)简单链表。 不,我不能使用STL或std :: list 。大多数都是在纸上完成的,但我似乎在实现一个非常基本的游标时遇到了问题。
这是列表中的节点(部分内容):
struct Node {
int ap_nr;
Node *next;
};
我想通过添加节点功能中的列表:
void add_node (Node **begin, int ap_nr)
{
stuff happens
}
这就是我调用函数的方式:
add_node(&(*begin), ap_nr);
我想创建一个从begin(我的列表的头部)开始的游标,并使用cursor->next
遍历每个节点,直到我到达结束(while (cursor->next!=0))
但我不能简单地说:
Node *cursor;
cursor = new Node;
cursor = begin;
因为这只会用begin覆盖光标,使我的尝试无效。我仍然需要指针开始并能够调用STRUCT函数“ - > next”
我该怎么做?
* ALSO * 我怎么能记住以前的节点?我可以这样做:
Node *previous;
previous = new Node;
previous = &(*begin); // ?
答案 0 :(得分:1)
听起来你想要遍历add_node
函数中的列表。如果是,请尝试以下
void add_node (Node **ppBegin, int ap_nr)
{
if (!ppBegin) {
// Need to handle the case of bad user data here
}
// Traverse until we get the to the empty next value
while ((*ppBegin)->next) {
ppBegin = &((*ppBegin)->next);
}
// ppBegin now points to the address of where the new node should go
Node* created = new Node();
created->ap_nr = ap_nr;
*ppBegin = created;
}
注意:要最初调用此函数,您只需使用add_node(&theListPointer)
调用它。