Я пишу программу, и частью этой программы является функция, которая должна удалить последний элемент в LinkedList:
struct node *del_the_last(struct node *head) {
struct node *h1 = head;
if (head == NULL) {
return NULL;
}
while (head->next != NULL) {
head = head->next;
}
free(h1);
return head;
}
При заданных значениях:
16, 7, 8, 12, 13, 19, 21, 12
моя программа возвращает
[12]
однакодолжен удалить его.Поэтому я попробовал еще раз, и это самое близкое, что я получил:
struct node *del_the_last(struct node *head) {
struct node *h1 = head;
int flag = 1;
if (head == NULL) { return NULL; }
while (flag == 1) {
if (head->next->next == NULL) {
flag = 0;
head->next = NULL;
free(h1);
return head;
}
else {
head = head->next;
}
}
}
Учитывая вывод:
2,7,1,8
Моя программа возвращает:
1
Также я подтвердил, что значение:
8
Удаляется из LinkedList при попытке вернуть head-> next, которое вернуло ошибку
Я знаю, как поступить с решением этой проблемы, но я не уверен, как перевести это в C-код.
Это то, что нужно сделать моей программе:
- Сохранить указатель на начало узла (* head) в переменную
- Позвольте программе работатькак обычно, т.е. код выше
- Присвойте заголовку значение указателя в шаге # 1
- свободный указатель
- Возврат головки
Я считаю, что это то, что нужно сделать, но я не уверен, как это сделать
Пожалуйста, посоветуйте мне правильный путь