Перенос элемента в списке

Описать процедуру, которая переносит в конец непустого списка L его первый элемент. (простые списки задача №18)(см. "Сборник задач для начинающего программиста")

Алгоритм:
1)создаем страктуру список
2)получаем от пользователя число, являющееся длиной списка
3)заполняем список числами
4)перемещаем первый элемент в конец списка
5)освобождаем память

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
 
// Описываем структуру данных - элемент списка
struct L
{
	int value;
	L* nextItem;
};
 
// Функция печатает список
void printList(L* List)
{
	L *currentItem=List;
	while(currentItem) 
	{
		printf("%d\n", currentItem->value);
		currentItem=currentItem->nextItem;
	};
}
 
// Функция создает список из заданного количества элементов
L* createList(int size)
{
	L* List=new L;
	L* currentItem=List;
 
	currentItem->value=rand();
 
	for(int num=2;num<=size;num++)
	{
		// Создаем новый элемент списка
		currentItem->nextItem=new L;
		currentItem->nextItem->value=rand();
		// Перемещаем указатель текущего элемента на только что созданный элемент списка
		currentItem=currentItem->nextItem;
		// Если это последний элемент списка,устанавливаем указатель на следующий элемент в ноль
		if(num==size)
		{
			currentItem->nextItem=NULL;
		};
	};
	return List;
}
 
// Функция переносит в конец списка его первый елемент
L* changeList(L *List)
{
	L *firstElement,*currentItem,*lastItem;
	// Запоминаем старый первый элемент списка
	firstElement=List;
	// Обновляем первый элемент списка
	List=List->nextItem;
	// Перебираем список до конца
	currentItem=List;
	while(currentItem->nextItem)
	{
		currentItem=currentItem->nextItem;
	};
	lastItem=currentItem;
	// Добавляем в конец списка элемент
	firstElement->nextItem=NULL;
	lastItem->nextItem=firstElement;
	return List;
}
 
int main()
{
	L* testList;
	int testListSize=0;
 
	std::cout<<"Vvedite razmer spiska:\t";
	// Получаем размер списка
	std::cin>>testListSize;
	// Проверяем корректность значения
	if(testListSize==0)
	{
		std::cout<<"Razmer ne vernyi!\n";
		getch();
		exit(0);
	}
	// Создаем список
	testList=createList(testListSize);
	// Печатаем созданный список
	std::cout<<"\n\n\nSpisok:\n\n";
	printList(testList);
	// Производим оперцию над списком
	testList=changeList(testList);
	// Печатаем созданный список
	std::cout<<"\n\n\nNovyi Spisok:\n\n";
	printList(testList);
 
	// Удаляем список и освобождаем память
	L* currentItem=testList;
	while(testList->nextItem)
	{
		currentItem=testList->nextItem;
		delete testList;
		testList=currentItem;
	};
	// Ожидаем от пользователя нажатия любой клавиши для выхода из программы
	getch();
}

Ключевые слова: 
список, перенос элемента
ВложениеРазмер
List_1.rar62.25 кб