Удаление последнего элемента из односвязного списка - 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 реализуется удаление последнего элемента из односвязного списка.

  1. Типизация структуры: Типизация структуры с именем listnode происходит на строке 8. В структуре присутствуют два поля: x типа int и next типа struct listnode *.
  2. Создание указателей на голову и хвост списка: На строке 13 создаются указатели head и tail, которые будут указывать на начало и конец списка соответственно.
  3. Вывод сообщения: На строке 16 выводится сообщение Hello World!, которое является неким тестовым сообщением и не имеет отношения к основной функциональности программы.
  4. Основной цикл программы: На строке 17 начинается и на строке 18 заканчивается основной цикл программы. В данном случае он пустой, поэтому никакие действия не выполняются.
  5. Нумерация элементов списка: В данном коде отсутствует, так как не используются переменные для хранения номеров элементов списка.
  6. Удаление последнего элемента списка: В данном коде отсутствует, так как основной цикл программы пустой и никаких действий над элементами списка не выполняется.
  7. Вывод на экран: На строке 16 выводится сообщение Hello World!, которое не относится к основной функциональности программы.
  8. Завершение программы: На строке 19 возвращается значение 0, что означает успешное завершение программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.111 из 5
Похожие ответы