Печать связанного списка.Что я делаю неправильно? - PullRequest
0 голосов
/ 06 марта 2011

Я получаю ошибку сегментации в следующем коде:

void print_stack(Node * root) {
   while(root != NULL) {
     // print the node
     root = root->next;
   }
}

Принимая во внимание, что это работает:

int print_stack(Node ** root) {

   Node * tmp = *root;

   while(*root != NULL) {
     // print the node
     *root = (*root)->next;
   }

   *root = tmp;
}

Вопрос в том, что я делаю не так? Для обеих функций я передаю адрес указателя узла в начало списка. Я пытаюсь заставить работать первую функцию, потому что она кажется более идеальной (без выделения указателя и без постоянного изменения корневого указателя) .. спасибо.

РЕДАКТИРОВАТЬ: Я разместил код здесь: http://dpaste.com/477724/

Ответы [ 3 ]

1 голос
/ 06 марта 2011

Вы передали адрес указателя узла, в то время как функция принимает только указатель узла.

Это:

print_stack(&main);

должно быть так:

print_stack(main);
0 голосов
/ 06 марта 2011

В программе, которую вы разместили по ссылке, есть ошибки компиляции.

Ошибка 1: int print_stack(Node * root) должен возвращать int. Но это определение не делает этого.

Ошибка2: В случае переключения при вызове print_stack предполагается передать аргумент типа Node*, а не Node**. Итак, это должно быть print_stack(main);.

Ошибка3: В case u функции переключения аргументы push-функций должны быть push(&main, &d);

0 голосов
/ 06 марта 2011

Разместите весь свой код, показывая инициализацию связанного списка - похоже, он должен работать.

class Node
{
public:
   Node();
   Node *next;
};

Node::Node()
{
   next = NULL;
}

void print_stack(Node * root) 
{    
   while(root != NULL) 
   {      // print the node     
      root = root->next;    
   } 
}

int _tmain(int argc, _TCHAR* argv[])
{
   Node *root = new Node();
   Node *begin = root;
   for (int i=0;i<10;i++)
   {
      Node *pNew = new Node();
      root->next = pNew;
      root = pNew;
   }
   print_stack(begin);
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...