Potrzebuje usunac liste 2-kierunkowa cykliczna rekurencyjnie ale nie wychodzi. Wklejam kod, należy poprawić funkcje removee żeby usuwała całą liste. Liczę na szybką pomoc bo potrzebuje to na zaraz :D
#include <stdio.h>
#include <stdlib.h>
struct listnode {
int data;
struct listnode *next, *previous;
} *listpointer;
struct listnode *create (int data)
{
struct listnode *first = (struct listnode*)malloc(sizeof(struct listnode));
if (first)
{
first->data=data;
first->next=first->previous=first;
}
return first;
};
struct listnode *findmin (struct listnode *listpointer)
{
struct listnode *start, *result;
start=result=listpointer;
int min = listpointer->data;
do {
if (min>listpointer->data)
{
min = listpointer -> data;
result = listpointer;
}
listpointer = listpointer -> next;
}while (listpointer!=start);
return result;
};
struct listnode *findnext (struct listnode *listpointer, int data)
{
listpointer=findmin(listpointer);
struct listnode *start = listpointer;
do {
if (listpointer->data>data)
break;
listpointer=listpointer->next;
}while (listpointer!=start);
return listpointer;
};
void add (struct listnode*listpointer, int data)
{
if (listpointer)
{
struct listnode *newnode = (struct listnode*)malloc(sizeof(struct listnode));
if (newnode)
{
newnode->data=data;
listpointer = findnext(listpointer, data);
newnode->next=listpointer;
newnode->previous=listpointer->previous;
listpointer->previous->next=newnode;
listpointer->previous=newnode;
}
}
}
struct listnode *deletenode (struct listnode *listpointer, int data)
{
if (listpointer)
{
listpointer = findnext(listpointer, data);
listpointer = listpointer ->previous;
if (listpointer->data==data && listpointer==listpointer->next)
{
free(listpointer);
return NULL;
}
else
if (listpointer->data==data)
{
struct listnode *next = listpointer -> next;
listpointer->previous->next = listpointer->next;
listpointer->next->previous = listpointer->previous;
free(listpointer);
listpointer = next;
}
}
return listpointer;;
};
void wypisz (struct listnode *listpointer)
{
listpointer = findmin(listpointer);
struct listnode *start = listpointer;
do {
printf("%4d", listpointer->data);
listpointer = listpointer ->next;
} while (listpointer != start);
}
void removee (struct listnode **listpointer)
{
if (*listpointer)
{
struct listnode *start=*listpointer;
if (*listpointer != start)
{
removee(&(*listpointer)->next);
free(*listpointer);
}
}
}
int main()
{
listpointer = create(4);
add(listpointer, 6);
add(listpointer, 0);
add(listpointer, 38);
add(listpointer, 2);
wypisz(listpointer);
puts("");
listpointer = deletenode(listpointer, 77);
listpointer = deletenode(listpointer, 2);
listpointer = deletenode(listpointer, 0);
listpointer = deletenode(listpointer, 38);
wypisz(listpointer);
puts("");
removee(&listpointer);
wypisz(listpointer);
puts("");
return 0;
}