2015-12-07 2 views
0

Я пытаюсь создать Связанный список в C, и я не могу понять, почему мой курсор не перейдет к следующему узлу. Я устанавливаю текущий узел на следующий узел, но когда я распечатываю адрес курсора, это то же самое. Я считаю, что это заставляет меня иметь бесконечный цикл, так как это моя главная проблема. Я устанавливаю следующий указатель с:Курсор привязанного списка не перейдет к следующему узлу

orig_cursor = orig_cursor->next; 

Мой весь метод ниже:

struct node* copyList() 
{ 
    if(!head) 
     return NULL; 

    struct node *head_copy = malloc(sizeof(struct node)); 
    struct node *copy_cursor = head_copy; 
    struct node *orig_cursor = head; 

    head_copy->data = head->data; 
    head_copy->next = NULL; 

    if(orig_cursor->next) 
    { 
     while(orig_cursor) 
     { 
      copy_cursor->next = malloc(sizeof(struct node)); 
      copy_cursor = copy_cursor->next; 

      printf("Original cursor pre-traversal = %d\n", orig_cursor->next); 
      orig_cursor = orig_cursor->next; 
      printf("Original cursor post-traversal = %d\n", orig_cursor->next); 

      copy_cursor->data = orig_cursor->data; 

      if(!orig_cursor->next) 
      { 
       copy_cursor->next = NULL; 
       break; 
      } 
     } 
    } 

    return head_copy; 
} 

Я также использую функцию следующий толчок(), чтобы подтолкнуть узлы в списке:

void push(int data) 
{ 
    if(!head) 
    { 
     head = malloc(sizeof(struct node)); 
     head->data = data; 
     head->next = NULL; 
     return; 
    } 

    struct node *new_node = malloc(sizeof(struct node)); 
    new_node->data = data; 
    new_node->next = head; 
    head = new_node; 
} 
+0

Указатели должны быть указаны с '% p' не'% d'. Скорее всего, вы используете 64-битный двоичный код, и ваш вывод значения указателя усечен из-за неправильного спецификатора формата. Так что он печатает только верхние 32 бита, которые, вероятно, будут одинаковыми для обоих указателей. Кроме того, у вас есть цикл в вашем списке :-) – kaylum

+0

Спасибо за отзыв о% p. Однако моя проблема заключается в том, что я застрял в бесконечном цикле в этом списке, и я не могу понять, почему. –

+0

Кроме того, я просто протестировал метод с% p, а значения указателя точно совпадают. –

ответ

0

Попробуйте использовать

struct node * new_node = malloc(sizeof(struct node)); 
+2

Выдача возврата 'malloc' не требуется, поскольку указатели void неявно преобразуются, на самом деле это плохо, потому что это может скрыть тот факт, что вы забыли включить' stdlib.h'. – jweyrich

+0

Ohh .. thanxx .. :) –

Смежные вопросы