Инвертировать линейный список - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Инвертировать список, т.е. в заданном списке переставить элементы, чтобы они следовали в порядке, обратном исходному.

Решение задачи: «Инвертировать линейный список»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. struct node
  5. {
  6.   int item;
  7.   node *next;    
  8. };
  9.  
  10. struct list
  11. {
  12.   node *head;
  13.   node *tail;
  14. };
  15.  
  16. void initlist(list& lst)
  17. {
  18.      lst.head = NULL;
  19.      lst.tail = NULL;
  20. }
  21.  
  22. void addtolist(list& lst, int item)
  23. {
  24.    if(lst.tail == NULL)
  25.           lst.tail = new node;
  26.    else
  27.      {
  28.          lst.tail->next = new node;    
  29.          lst.tail = lst.tail->next;
  30.      }
  31.    lst.tail->item = item;
  32.    lst.tail->next = NULL;
  33.    if(lst.head == NULL)
  34.       lst.head = lst.tail;
  35. }
  36.  
  37. void printlist(list& lst)
  38. {
  39.      node* p = lst.head;
  40.      while(p != NULL)
  41.      {
  42.              printf("%d ", p->item);
  43.              p = p->next;
  44.      }
  45.      printf("\n");
  46. }
  47.  
  48. void reverse(list& lst)
  49. {
  50.     node* p = lst.head->next;
  51.     lst.head->next = NULL;    
  52.     node* prev = lst.head, *p2;
  53.    
  54.     while(p != NULL)
  55.     {
  56.        p2 = p->next;
  57.        p->next = prev;
  58.        prev = p;
  59.        p = p2;
  60.     }
  61.     lst.tail = lst.head;
  62.     lst.head = prev;
  63. }
  64.  
  65. int main(int argc, char *argv[])
  66. {
  67.     list ls1;
  68.     initlist(ls1);
  69.     addtolist(ls1, 1);
  70.     addtolist(ls1, 3);
  71.     addtolist(ls1, 5);
  72.     addtolist(ls1, 2);
  73.    
  74.     printlist(ls1);
  75.     reverse(ls1);    
  76.     printlist(ls1);
  77.    
  78.   system("PAUSE"); 
  79.   return 0;
  80. }

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


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

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

12   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы