Witam,
Mam za zadanie napisać funkcję, która zajmie się usuwaniem pozycji z pojedynczo połączonej listy. Prototyp wygląda tak:
int remove(struct element **p, int number, int offset);
Czyli znajduje liczbę number i usuwam pozycję o offset dalej niż ta znaleziona. Napisałem coś takiego, ale nie do końca działa. Analizowałem ten kod i wydaje się, że jest nie najgorzej... A jednak :)
struct element {
int data;
struct element *next;
};
int remove(struct element **p, int number, int offset) {
int i = 1;
struct element *tmp;
if (!p)
return 0;
if ((*p)->data == number) {
while (i<offset && *p) {
(*p) = (*p)->next;
i++;
}
tmp = (*p)->next->next;
free((*p)->next);
(*p)->next = tmp;
return 1;
}
while ((*p)->next) {
if ((*p)->next->data == number) {
while (i<offset && *p) {
(*p) = (*p)->next;
i++;
}
tmp = (*p)->next->next;
free((*p)->next);
(*p)->next = tmp;
return 1;
}
*p = (*p)->next;
}
return 0;
}