Вот функция swap
.
void swap( node_t **current )
{
node_t *tmp = ( *current )->next->next;
( *current )->next->next = *current;
*current = ( *current )->next;
( *current )->next->next = tmp;
}
А вот функция simple_bubble_sort
void simple_bubble_sort( node_t **head )
{
if ( *head )
{
for ( node_t **first = head, *sorted = NULL, *last = sorted;
( *first )->next != last;
last = sorted )
{
sorted = ( *first )->next;
for ( node_t **current = first; ( *current )->next != last; current = &( *current )->next )
{
if ( ( *current )->next->data < ( *current )->data )
{
swap( current );
sorted = ( *current )->next;
}
}
}
}
}
Исследуйте их.
Обратите внимание на это заголовок <malloc.h>
не является стандартным заголовком C. Вместо этого используйте заголовок <stdlib.h>
.
Вам необходимо пересмотреть текущий код. Например, эта функция
node_t** list_new() {
node_t** list = malloc(sizeof **list);
if (!list) return NULL;
*list = NULL;
return list;
}
не имеет смысла, ее следует удалить.
Вам нужно просто определить в main указатель, например
node_t *head = NULL;
And передать его функциям, например, функции simple_bubble_sort
, например
simple_bubble_sort( &head );
, или функцию list_push_front
следует определить как
int list_push_front(node_t** list, data_t data)
{
node_t* node = malloc(sizeof(node_t));
int success = node != NULL;
if ( success )
{
node->data = data;
node->next = *list;
*list = node;
}
return success;;
}