Я работаю с двойным перечнем. Все работает нормально с освобождением функции, которая должна добавить копию «кто» перед «whereX» [см. Ниже код]. Почему функция не работает?Как добавить узел в определенном месте?
void addNodeAt(Node *whereX, Node *who)
{
//copy
Node *temp = (Node*)malloc(sizeof(Node));
temp->count = who->count;
strcpy(temp->word,who->word);
temp->before = whereX->before;
temp->after = whereX;
//paste
if(whereX->after == who)
whereX->after = who->after;
whereX->before = temp;
}
EDIT:
В ответ на user326404, который сказал:
«Примечание: Ваша функция Страдает недостаток, который предотвращает его от вставки, кто в качестве нового главы списка. Он будет вставляться, но вы никогда не вернете новый головной узел, чтобы список был потерян ».
Что делать, если у меня есть головка узла как глобальная переменная. Как я могу переделать голову, не возвращая ее?
Что делать, если я не хочу возвращать новую голову, и у меня есть головка Node * как глобальная переменная. как я могу исправить недостаток? –
С глобальной переменной, удерживающей головку, вам нужно будет освободить() старую голову, а затем указать ее на новую. – Manfre
M ... Это интересно. Глобальная переменная «head», которую я просто указываю на первый узел списка и последний узел списка, так что «whereX» и «who» никогда не будут головами. Это любопытно, как мост. –