diff --git a/du4/snake.c b/du4/snake.c index 881f20b..a8f3b02 100644 --- a/du4/snake.c +++ b/du4/snake.c @@ -18,29 +18,33 @@ struct snake* add_snake(struct snake* snake,int x,int y) struct snake* remove_snake(struct snake* snake){ + //pomocne lok. premeny struct snake* currentPtr = snake; - struct snake* prevPtr; + struct snake* prevPtr = NULL; if (snake == NULL) { return NULL; } - while (1) + + //kontrola, ze ci hned dalsi prvok je NULL rovno hned zo zaciatku.. + if (snake->next == NULL) + { + free(snake); + return NULL; + } + + //iteracia cez node-y + while (currentPtr->next != NULL) { - //pomocny pointer -> ulozenie predoslej casti/node-u prevPtr = currentPtr; - //skontroluje, ze ci dalsia cast je PRAZDNA. - if (currentPtr->next == NULL) - { - //uprava listu -> odlinkje tuto cast (tak aby prevPtr->next NEFERENCOVAL na uz uvolnenu cast) - prevPtr->next = NULL; - //uvolni pamat pre akt. cast (uvolni pamat) - free(currentPtr); - break; - } - //iteruj ku dalsiej casti (node) currentPtr = currentPtr->next; } + + //'currentPtr'= posledny platny node + prevPtr->next = NULL; + free(currentPtr); + return snake; }