Помогите, кто может
Есть код:
Код:
#include <locale.h>
#include <stdio.h>
struct Single_List {
int Data;
Single_List *Next;
};
void Make_Single_List(int n,Single_List** Head);
void Print_Single_List(Single_List* Head);
Single_List* Insert_Item_Single_List(Single_List* Head,int Number, int DataItem);
Single_List* Delete_Item_Single_List(Single_List* Head,int Number);
void Delete_Single_List(Single_List* Head);
void Sort_Single_List(Single_List* Head, int n, int Number);
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int Number, DataItem, n=7;
Single_List *Head; //указатель на первый элемент списка
setlocale (LC_ALL, "RUSSIAN");
cout<<"Введите значение: "<<endl
<<"1-для создания нового списка"<<endl
<<"2-для вставки элемента с заданным номером"<<endl
<<"3-для удаления элемента с заданным номером"<<endl
<<"4-для печати одноправленного списка"<<endl
<<"5-для выхода из программы"<<endl;
int m;
cin>>m;
while (m!=5){
switch (m){
case 1: Make_Single_List(n,&Head);
break;
case 2: cout<<"Введите номер элемента для вставки и его значение"<<endl;
cin>>Number>>DataItem;
Insert_Item_Single_List(Head,Number,DataItem);
break;
case 3: cout<<"Введите номер элемента для удаления"<<endl;
cin>>Number;
Delete_Item_Single_List(Head,Number);
break;
case 4: Print_Single_List(Head);
break;
default:cout<<"Неправильный выбор"<<endl;
break;
}
cout<<"Введите значение: "<<endl
<<"1-для создания нового списка"<<endl
<<"2-для вставки элемента с заданным номером"<<endl
<<"3-для удаления элемента с заданным номером"<<endl
<<"4-для печати одноправленного списка"<<endl
<<"5-для выхода из программы"<<endl;
cin>>m;
}
Delete_Single_List(Head);
return 0;
}
void Make_Single_List(int n,Single_List** Head){
if (n > 0) {
(*Head) = new Single_List();
//выделяем память под новый элемент
cout<< "Введите значение ";
cin>> (*Head)->Data;
//вводим значение информационного поля
(*Head)->Next=NULL;//обнуление адресного поля
Make_Single_List(n-1,&((*Head)->Next));
}
}
//печать однонаправленного списка
void Print_Single_List(Single_List* Head) {
if (Head != NULL) {
cout<< Head->Data << "\t";
Print_Single_List(Head->Next);
//переход к следующему элементу
}
else
cout<< "\n";
}
/*вставка элемента с заданным номером в однонаправленный список*/
Single_List* Insert_Item_Single_List(Single_List* Head,
int Number, int DataItem){
Number--;
Single_List *NewItem=new(Single_List);
NewItem->Data=DataItem;
NewItem->Next = NULL;
if (Head == NULL) {//список пуст
Head = NewItem;//создаем первый элемент списка
}
else {//список не пуст
Single_List *Current=Head;
for(int i=1; i < Number && Current->Next!=NULL; i++)
Current=Current->Next;
if (Number == 0){
//вставляем новый элемент на первое место
NewItem->Next = Head;
Head = NewItem;
}
else {//вставляем новый элемент на не первое место
if (Current->Next != NULL)
NewItem->Next = Current->Next;
Current->Next = NewItem;
}
}
return Head;
}
/*удаление элемента с заданным номером из однонаправленного списка*/
Single_List* Delete_Item_Single_List(Single_List* Head,
int Number){
Single_List *ptr;//вспомогательный указатель
Single_List *Current = Head;
for (int i = 1; i < Number && Current != NULL; i++)
Current = Current->Next;
if (Current != NULL){//проверка на корректность
if (Current == Head){//удаляем первый элемент
Head = Head->Next;
delete(Current);
Current = Head;
}
else {//удаляем не первый элемент
ptr = Head;
while (ptr->Next != Current)
ptr = ptr->Next;
ptr->Next = Current->Next;
delete(Current);
Current=ptr;
}
}
return Head;
}
/*освобождение памяти, выделенной под однонаправленный список*/
void Delete_Single_List(Single_List* Head){
if (Head != NULL){
Delete_Single_List(Head->Next);
delete Head;
}
}
Помогите добавить функцию, которая могла бы преобразовать список таким образом, чтобы в первой половине располагались элементы,
стоящие в нечетных позициях, а во второй половине в четной.
По логике понимаю, что нужно просто их удалить с определенных позиций и вставить в конец списка, но возникли проблемы с указателями.