Удаление последнего элемента из односвязного списка - 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, что означает успешное завершение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д