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

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

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

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

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

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
 
struct node
{
  int item;
  node *next;     
};
 
struct list
{
  node *head;
  node *tail;
};
 
void initlist(list& lst)
{
     lst.head = NULL;
     lst.tail = NULL;
}
 
void addtolist(list& lst, int item)
{
   if(lst.tail == NULL)
          lst.tail = new node;
   else
     {
         lst.tail->next = new node;    
         lst.tail = lst.tail->next;
     }
   lst.tail->item = item;
   lst.tail->next = NULL;
   if(lst.head == NULL)
      lst.head = lst.tail;
}
 
void printlist(list& lst)
{
     node* p = lst.head;
     while(p != NULL)
     {
             printf("%d ", p->item);
             p = p->next;
     }
     printf("\n");
}
 
void reverse(list& lst)
{
    node* p = lst.head->next;
    lst.head->next = NULL;    
    node* prev = lst.head, *p2;
    
    while(p != NULL)
    {
       p2 = p->next;
       p->next = prev;
       prev = p;
       p = p2;
    }
    lst.tail = lst.head;
    lst.head = prev;
}
 
int main(int argc, char *argv[])
{
    list ls1;
    initlist(ls1);
    addtolist(ls1, 1);
    addtolist(ls1, 3);
    addtolist(ls1, 5);
    addtolist(ls1, 2);
    
    printlist(ls1);
    reverse(ls1);    
    printlist(ls1);
    
  system("PAUSE");  
  return 0;
}

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


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

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

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