Похоже, ты рядом. Вы забыли удалить первое слово (вы заявляете, что хотите сделать это независимо). Тогда ваше время почти там. Также вы сравниваете два указателя, которые всегда должны быть неравны (tosPtr
и tosPtr->next
) - разве не должно быть какой-то циклической ссылки, которую вы не упомянули?
struct stack *dropoff(struct stack *tosPtr) {
printf("current tos is %s\n", tosPtr->name);
if(tosPtr == NULL)
return STACK_IS_EMPTY;
struct stack *oldBox = tosPtr;
tosPtr = tosPtr->next;
//Double check in while we didn't hit bottom of stack
while(tosPtr && strcmp(oldBox->name, tosPtr->name) == 0) {
free(oldBox); //Maybe need to free oldBox->name as well?!
oldBox = tosPtr;
tosPtr = tosPtr->next;
}
//One node left to free - maybe name?
free(oldBox);
return tosPtr ? tosPtr : STACK_IS_EMPTY; //Return empty stack if needed
}
Обратите внимание, что вам нужно struct
и в определении переменной, если вы не typedef
его, и я думаю, что вы не сделали этого, потому что аргумент определен таким образом. Если имя было malloc
d, вам нужно освободить его задолго до освобождения стекового узла.