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