Подразделы

Другие разделы

Дата и время

19/03/2024 16:05:36

Авторизация

Имя:
Пароль:
Зарегистрироваться
Восстановить пароль
 

print2301. (Односвязный линейный список) Слияние двух сортированных списков

print(Односвязный линейный список) Слияние двух сортированных списков

Ограничения: время – 1s/2s, память – 32MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод copy
Послать решение Blockly Посылки Темы Где Обсудить (0)

2 отсортированных списка с головами Head1, Head2
Нужно слить в один сортированный список.
Напишите процедуру слияния.
Используйте следующий шаблон:
#include <iostream>
#include <limits.h>

using namespace std;

struct NODE{
   int Number;
   NODE *Next;
};

NODE * MakeList(int*, int);
NODE *JoinTwoList(NODE*, NODE*);

int main(){
   int Arr1[]={2,3,5,9};
   int Arr2[]={4,6,7,11,16};
   NODE *Head1, *Head2;
   Head1=MakeList(Arr1,sizeof(Arr1)/sizeof(int));
   Head2=MakeList(Arr2,sizeof(Arr2)/sizeof(int));
   NODE *Head = JoinTwoList(Head1, Head2);
   cout << "Head";
   for(NODE* p1=Head->Next; p1!=NULL; p1=p1->Next){
      cout << " -> " << p1->Number;
   }
   return 0;
}


NODE *JoinTwoList(NODE *Head1, NODE *Head2){
// Выполнить слияние списков с головами Head1 и Head2
// Функция возвращает указатель на голову списка,
// являющегося результатом слияния
// ............................
}



NODE * MakeList(int Arr[], int n){
// Эта функция создаёт один список
// Arr - массив чисел, которые должны быть помещены в список
// n - их количество
NODE *Head=new NODE,*x;
Head->Next=NULL; //Явно указываем на NULL
Head->Number=INT_MAX; // Условное значение головы
x=Head;
// Создание собственно списка
for (int i = 0; i < n; i++) {
	x->Next=new NODE;
	x=x->Next;
	x->Number=Arr[i];
	x->Next = NULL;
}
return Head;
} 
loading