У меня есть следующий алгоритм, который предназначен для изменения связанного списка.Связанные списки - глобальные v. Локальные переменные
typedef struct node
{
int data;
struct node* next;
}LL_t;
void insert(LL_t** head, int value)
{
LL_t* new_node = (LL_t*) malloc(sizeof(LL_t));
new_node->data = value;
new_node->next = (*head);
(*head) = new_node;
}
LL_t* head;
// Post: L contains the data in the original L, but in the reverse order.
void reverse(LL_t * L) {
LL_t *current, *prev, *next;
current = head;
prev = NULL;
while (current != NULL)
{
next = current->next;
current->next = prev;
prev = current;
current = next;
}
head = prev;
}
int main()
{
struct node* L = NULL;
insert(&L, 42);
insert(&L, 36);
insert(&L, 14);
insert(&L, 17);
insert(&L, 48);
insert(&L, 36);
print(L);
printf("\n");
reverse(L);
print(L);
return 0;
}
Списки отображаются как идентичные при печати как до, так и после обратной функции. Я считаю, что я случайно использовал локальные переменные для изменения моего списка, тогда как я хотел бы непосредственно изменить список (L). Выход:
36 48 17 14 36 42
36 48 17 14 36 42
Как напрямую изменить связанный список с использованием глобальных переменных?
Что такое 'print (L);'? –
Просто функция, которая печатает связанный список. Я отказался от функций «print list» и «insert element», так как моя проблема связана с функцией «reverse». – ballin
В этом случае мы не видим, как заполняется 'head'. :-) –