Удаление последнего элемента из односвязного списка - C (СИ)
Формулировка задачи:
добрый вечер. помогите, пжлста, разобраться, пытаюсь удалить последний элемент в списке, по принципу первого, но похоже какую то ерунду пишу.
p.s. подкиньте идею как оптимизировать код, чтобы удаление всех элементов производить так сказать в одной части кода, а не в отдельных. спасибо.
void Delete(LIST *first, int index)
{
list_elem *elem, Left, Right,prev;/создаем указатель на элемент структуры
int i = 0;/номер элемента
if((index<0)||(index>=first->NULL))
return; /возращаем ноль, если индекс не меньше 0 и не больше последнего элемента
if (index==0){ /если индекс равен 0
elem=first->head->next;//сохраняем указатель на второй элемент, чтоб не потерять
free(first->head); //удаляем первый элемент
first->head=elem; //начало списка теперь указывает на бывший второй элемент
return;
}
if (index==NULL) {
elem=first->head->next->prev;//sohranjaem ukazatelj na predposlednij element
free (prev->NULL); //udaljaem poslednij element
prev->NULL=elem; //konec spiska teperj ukazivaet na bivwij predposlednij element
return;
}
for(Left= first->head; i != index-1; elem = elem->next) i++;/здесь происходит проверка , сравниваем элементы
elem = Left->next;//элем передвигается на 1
Right=elem->next//правый через элемент занимает след. позицию
free(elem); //удаляем элемент
Left->next =Right;//передвигаем весь список
first->NULL--;сохраненяем правильный размер
return;
}Решение задачи: «Удаление последнего элемента из односвязного списка»
textual
Листинг программы
#include <stdio.h>
typedef struct listnode
{
int x;
struct listnode *next;
} node;
int main(void)
{
node *head, *tail;
printf("Hello World!\n");
return 0;
}
Объяснение кода листинга программы
В данном коде на языке C реализуется удаление последнего элемента из односвязного списка.
- Типизация структуры:
Типизация структуры с именем
listnodeпроисходит на строке 8. В структуре присутствуют два поля:xтипа int иnextтипа struct listnode *. - Создание указателей на голову и хвост списка: На строке 13 создаются указатели head и tail, которые будут указывать на начало и конец списка соответственно.
- Вывод сообщения:
На строке 16 выводится сообщение
Hello World!, которое является неким тестовым сообщением и не имеет отношения к основной функциональности программы. - Основной цикл программы: На строке 17 начинается и на строке 18 заканчивается основной цикл программы. В данном случае он пустой, поэтому никакие действия не выполняются.
- Нумерация элементов списка: В данном коде отсутствует, так как не используются переменные для хранения номеров элементов списка.
- Удаление последнего элемента списка: В данном коде отсутствует, так как основной цикл программы пустой и никаких действий над элементами списка не выполняется.
- Вывод на экран:
На строке 16 выводится сообщение
Hello World!, которое не относится к основной функциональности программы. - Завершение программы: На строке 19 возвращается значение 0, что означает успешное завершение программы.