Страницы

Поиск по вопросам

вторник, 4 июня 2019 г.

Свой List из array

Пытаюсь создать свой list из array
есть структура
template struct Node { T data; Node* next; };
собственно функция
template Node* arrayToList(const T tab[], size_t size){
Node *node = new Node; for(int i=0;idata = tab[i]; node->next = new Node; } }
в main
int tabi[] = {2,1,4,3,6,5,7,8}; size_t sizei = sizeof(tabi)/sizeof(tabi[0]); Node *listAi = arrayToList(tabi,sizei);
так вот проблема в том что не могу править созданный экземпляр Node тут node->next = new Node; я создаю экземпляр , а как в него значение из массива занести ?


Ответ

Не понятно, в чем состоит ваша проблема
Поэтому я предложу код, который позволяет заполнить список элементами массива. Надеюсь, что если это не то, что вам нужно, то вы об этом сообщите мне в своем комментарии к ответу.
Вот демонстрационная программа
#include
template struct Node { T data; Node *next; };
template Node * arrayToList( const T a[], size_t n ) { Node *head = nullptr; Node **current = &head;
for ( size_t i = 0; i < n; i++, current = &( *current )->next ) { *current = new Node { a[i], nullptr }; }
return head; }
template void displayList( Node *head ) { for ( ; head; head = head->next ) std::cout << head->data << ' '; }
int main() { int a[] = { 2, 1, 4, 3, 6, 5, 7, 8 }; const size_t N = sizeof( a ) / sizeof( *a );
for ( int x : a ) std::cout << x << ' '; std::cout << std::endl;
Node *list = arrayToList( a, N );
displayList( list ); std::cout << std::endl; }
Ее вывод на консоль:
2 1 4 3 6 5 7 8 2 1 4 3 6 5 7 8
Если ваш компилятор не поддерживает список инициализации для оператора new, то предложение
*current = new Node { a[i], nullptr };
вы можете заменить на следующие предложения
*current = new Node; ( *current )->data = a[i]; ( *current )->next = nullptr;
Либо вы можете написать для класса Node конструктор, чтобы можно было бы опять записать все в одну строчку, как, например
*current = new Node( a[i], nullptr );

Комментариев нет:

Отправить комментарий