创建指针的指针并修改它而不修改原始指针?

时间:2012-04-02 17:28:10

标签: c++ singly-linked-list

随意编辑标题,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); // ?

1 个答案:

答案 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)调用它。