Как правильно передать указатель на функцию? - PullRequest
0 голосов
/ 23 сентября 2019

Я не знаю, подходит ли заголовок к проблеме, но я думаю, что моя проблема заключается в том, как правильно передать указатели в функции.Итак, у меня есть связанный список, на который указывает head;

Давайте представим, что у меня есть этот связанный список, на который указывает head: {1, 2, 3, 4, 5, NULL} Я вызываю функцию NextNode (head), и я даю список, результатом будет то, что head указывает на 2. Мне бы хотелось, чтобы в следующий раз, когда я вызывал функцию, у меня должен был быть результат, указывающий на 3. И т.д. Я хотел бы, чтобы, когда функциявызывается, следующий узел не всегда должен быть head-> next, но он должен продолжаться.

У меня есть функция, которая принимает в качестве параметра голову;

struct node
{
  int val;
  node*next;
}
node * create()
{
  node*tmp;
  node *head;
  for (int i = 1; i<6; i = i + 1)
  {
    tmp = new node;
    tmp->val = i;
    tmp->next = head;
    head = tmp;
  }
  return head;
}
node* NextNode(node*current)
{
  if (somethingHappens)
  {
    current = current->next; //this is wrong. Because it's important to not lose the pointer of head;
  }
  return current;
}
int main()

{
  node* result;
  node* another;
  node* head;
  head = create();
  result = NextNode(head);
  std::cout << result->val << std::endl;
  //I call again the function, giving always as paramter the head pointer
  another = NextNode(head);
  std::cout << another->val << std::endl;

  return 0;
}

Так что result-> val должен дать 2 как результат, а other-> val должен дать 3. Но, очевидно, это не такпроисходит, потому что голова исправлена.Есть ли другой способ, которым я могу сделать это?Код является псевдокодом того, что я хотел бы сделать.Надеюсь, я был ясен, английский не мой родной язык, поэтому, пожалуйста, будьте терпеливы.

1 Ответ

0 голосов
/ 23 сентября 2019

Измените another = NextNode(head); на another = NextNode(result);.Вы не пропускаете следующий узел, полученный из предыдущего вызова, во время вызова NextNode() в следующий раз.

( В примечании стороннего характера я вижу, что отправленный вами код не является рабочим или каким-либо другимКод отсутствует и не опубликован, но кода достаточно, чтобы понять ваши сомнения и найти решение. )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...