Создание указателя на указатель и изменение его без изменения оригинала? - PullRequest
0 голосов
/ 02 апреля 2012

Не стесняйтесь редактировать заголовок, иногда вместо справки английский может запутаться.

Я должен сделать (, и нет, я не могу изменить, так оно и должно быть ) простой связанный список. НЕТ, я не могу использовать 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);

Я хочу создать курсор, который начинается с начала (глава моего списка) и проходит через каждый узел, используя cursor->next, пока я не достигну конца (while (cursor->next!=0))

, но я не могу просто сказать:

Node *cursor;
cursor = new Node;
cursor = begin;

Потому что это простоперезаписать курсор с начала, делая мою попытку недействительной.Мне все еще нужно сделать указатель, чтобы начать и иметь возможность вызывать функцию STRUCT "-> далее"

Как я могу это сделать?

* ТАКЖЕ * Какя могу вспомнить предыдущий узел?я могу сделать это:

Node *previous;
previous = new Node;
previous = &(*begin); // ?

1 Ответ

1 голос
/ 02 апреля 2012

Звучит так, будто вы хотите просмотреть список в функции 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).

...