Poprawilem chyba tylko tę linijkę.. wszystko działa jak należy. Dziękuję za pomoc! :)
#include <stdio.h>
#include <stdlib.h>
struct list
{
int data;
struct list *next;
};
void create_list(struct list** front, int data)
{
struct list *new_element = (struct list*)malloc(sizeof(struct list));
if(new_element)
{
new_element->data = data;
new_element -> next = NULL;
*front = new_element;
}
else puts("Nie udalo sie dodac elementu");
}
void add_front(struct list** front, struct list* new_node)
{
new_node->next = *front;
*front = new_node;
}
struct list* find_spot(struct list* front, int data)
{
struct list* prev = NULL;
while(front && front->data < data)
{
prev = front;
front = front->next;
}
return prev;
}
void add_midle(struct list* prev, struct list* new_node)
{
new_node->next = prev->next;
prev->next = new_node;
}
void add_to_list(struct list** front)
{
int data;
struct list* new_node = (struct list*)malloc(sizeof(struct list));
puts("Podaj liczbe, ktora chcesz dodac: ");
scanf("%d", &data);
if(!(*front))
create_list(front, data);
else
{
if(new_node)
{
new_node->data = data;
if((*front)->data>=data) add_front(front, new_node);
else
{
struct list* prev = find_spot(*front, data);
add_midle(prev, new_node);
}
}
}
}
void print_list_b(struct list* front)
{
if(!front) puts("Brak elementow.");
else
{
while(front)
{
printf("%p ", &(front->data));
front = front->next;
}
}
}
void print_list(struct list* front)
{
if(!front) puts("Brak elementow.");
else
{
while(front)
{
printf("%d ", (front->data));
front = front->next;
}
}
}
struct list* find_element(struct list* front, int data)
{
struct list* prev = NULL;
while(front && front->data != data)
{
prev = front;
front = front -> next;
}
printf("%d", prev->data);
return prev;
}
void delete_middle(struct list* prev)
{
struct list* tmp = prev->next;
if(tmp->next==NULL)
{
prev->next = tmp->next;
free(prev->next);
}
else
{
prev->next = tmp->next;
prev = tmp->next;
free(prev->next);
}
}
void delete_from_list(struct list** front)
{
if(!(*front)) puts("Lista jest pusta");
else
{
int data;
puts("Podaj liczbe, ktora chcesz usunac: ");
scanf("%d", &data);
if((*front)->data == data)
{
struct list* tmp = (*front)->next;
free(*front);
*front = tmp;
}
else
{
struct list* prev = find_element(*front, data);
delete_middle(prev);
}
}
}
void remove_list(struct list** front)
{
struct list* tmp = NULL;
while(*front)
{
tmp = (*front)->next;
(*front) = NULL;
free((*front));
(*front) = tmp;
}
}
int main()
{
int option = -1;
struct list *front = NULL;
while(option!=0)
{
puts("Elementy listy:");
print_list(front);
puts("");
print_list_b(front);
puts("");
puts("1. Dodaj element.");
puts("2. Usun element.");
puts("3. Usun liste.");
scanf("%d", &option);
if(option == 1) add_to_list(&front);
if(option == 2) delete_from_list(&front);
if(option == 3) remove_list(&front);
}
return 0;
}