Я пытаюсь создать Связанный список в 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;
}
Указатели должны быть указаны с '% p' не'% d'. Скорее всего, вы используете 64-битный двоичный код, и ваш вывод значения указателя усечен из-за неправильного спецификатора формата. Так что он печатает только верхние 32 бита, которые, вероятно, будут одинаковыми для обоих указателей. Кроме того, у вас есть цикл в вашем списке :-) – kaylum
Спасибо за отзыв о% p. Однако моя проблема заключается в том, что я застрял в бесконечном цикле в этом списке, и я не могу понять, почему. –
Кроме того, я просто протестировал метод с% p, а значения указателя точно совпадают. –