C Упражнения: удаление последнего узла односвязного списка

Связанный список C: Упражнение 9 с решением

Напишите программу на C для удаления последнего узла односвязного списка.

Графическая презентация:

Пример решения:

Код C:

  #include  #include  struct node {int num; //Данные узла struct node * nextptr; //Адрес узла} * stnode; void createNodeList (int n); //функция для создания спискаvoid LastNodeDeletion (); //функция для удаления последних узловvoid displayList (); //функция для отображения списка int main () {int n, num, pos; printf (" n  n Связанный список: удаление последнего узла односвязного списка:  n"); printf ("-----  --------------------------------------------------  --------  n ");  printf ("Введите количество узлов:");  scanf ("% d", & n);  createNodeList (n);  printf (" n В список введены следующие данные:  n");  displayList ();  LastNodeDeletion ();  printf (" n Новый список после удаления последнего узла:  n");  displayList ();  return 0;} void createNodeList (int n) {struct node * fnNode, * tmp;  целое число, я;  stnode = (узел структуры *) malloc (sizeof (узел структуры));  if (stnode == NULL)//проверяем, является ли stnode NULL, и если да, то не выделяется память {printf ("Память не может быть выделена.");  } else {//считывает данные для узла с помощью клавиатуры printf ("Входные данные для узла 1:");  scanf ("% d", & num);  stnode-> число = число;  stnode-> nextptr = NULL; //Связывает поле адреса с NULL tmp = stnode; //Создает n узлов и добавляет в связанный список для (i = 2; inum = num;//связывает поле num fnNode с num fnNode-> nextptr = NULL;//связывает поле адреса fnNode с NULL tmp->  nextptr = fnNode;//связывает предыдущий узел, т.е. tmp, с fnNode tmp = tmp-> nextptr;}}}}//Удаляет последний узел связанного спискаvoid LastNodeDeletion () {struct node * toDelLast, * preNode; if (stnode  == NULL) {printf ("В списке нет элемента.");} Else {toDelLast = stnode; preNode = stnode;/* Переход к последнему узлу списка */while (toDelLast-> nextptr! =  NULL) {preNode = toDelLast; toDelLast = toDelLast-> nextptr;} if (toDelLast == stnode) {stnode = NULL;} else {/* Отключает связь второго последнего узла с последним узлом */preNode-> nextptr = NULL  ;}/* Удаляем последний узел */free (toDelLast);}}//функция для отображения всего спискаvoid displayList () {struct node * tmp; if (stnode == NULL) {printf ("Нет  данные найдены в пустом списке. ");} else {tmp = stnode; while (tmp! = NULL) {printf (" Data =% d  n ", tmp-> num);//выводит данные текущего узла tmp = tmp-> nextptr; //перемещает позицию текущего узла}}}  

Пример вывода:

 Связанный список: удаление последнего узла односвязного списка: -  --------------------------------------------------  ----------- Введите количество узлов: 3 Входные данные для узла 1: 1 Входные данные для узла 2: 2 Входные данные для узла 3: 3 Данные, введенные в список:  Data = 1 Data = 2 Data = 3 Новый список после удаления последнего узла: Data = 1 Data = 2 

Блок-схема:

createNodeList ():

LastNodeDeletion ():

displayList ():

Оцените статью
nanomode.ru
Добавить комментарий