> В этом примере мы создаем функцию deepCopy, которая принимает исходный многосвязный список и возвращает его глубокую копию. Мы создаем новый узел для каждого узла исходного списка, копируем значения данных и указателей на следующий узел и случайный узел. Затем мы обновляем указатели случайных узлов нового списка, чтобы они указывали на правильные узлы в новой копии.
Привет! Нужно хранить все указатели в массиве, тогда станет легче намного
Когда указатели будут в массиве тогда задача станет легче, указатель это просто число, вам я подозреваю нужен не просто указатель а скорее типо ссылки, в котором будет указано имя на объект
В таком случае задача тривиальная
А в чём собственно проблема то? Прошёлся по листу, выделил память, скопировал элементы, прошёлся второй раз (одновременно по первому и по второму), проверил сколько контактов, выделил память и записал новые адреса (обычная функция поиска в списке) - всё.
Если чуть оптимизировать, то можно на первом прохождении считать количество контактов и сразу выделять память под массив (это если контактов много), а поиск упрощается, если ты этот список в хеш-мапе хранить будешь.
Откуда я буду знать новые адреса для контактов?
Я ж говорю - напиши функцию поиска в списке, берёшь уникальный идентификатор из старого списка, ищешь в новом и копируешь адрес.
А вообще, с точки зрения дизайна списка, он у тебя неверный, т.к. имя не является уникальным идентификатором, т.е. у тебя могут быть несколько одинаковых элементов.
В моем случае это возможно
Тогда как первый "Петя" будет отличаться от второго "Пети"?))
Я поробал сделать +- тоже самое но с массивами и застрял на том что у меня криво присваиваться на 87 строке поинтер
Великолепно, а с точки зрения базы данных? Однако ладно, если хочешь, пусть будет уникальный адрес, но это неправильно. В случае адресов просто посчитай порядковый номер контакта и добавь адрес контакта с этим же номером из нового массива.
Это задания с уника, там не стоит суть практичности кода а именно написания пол енные условия
Ну вот я так и делаю, а получаеться криво, типо почему то не присвоилось
Давайте начнем с описания структуры списка, как у вас сейчас написано?
Я глянул твой код, ну это очень плохо. Какая семантика у этого выражения?)) originalArray[i] - originalArray[i]->m_Contacts[j];
Немного не понял
86 строка
Какую смысловую нагрузку несёт это выражение?
Насколько далеко в массиве находятся поинтеры, так как они упорядочены то как мне кажется точно на таком же расстоянии должны находиться поинтеры с соответствующими значениями в копии, так как массив это большой целостный кусок памяти а не рандом раскиданный поинтеры, я не уверен но на этом базируется идея
Боюсь сказать но это действительно уб
Выше написал, почему это неверно. Чтобы такое делать, тебе нужно изначально иметь массив, т.е. линейный блок памяти. А у тебя последовательно хранятся только указатели на эти блоки.
Неопределенное поведение
Уб значит что полагаться на такое поведение нельзя, может сломать от фазы Луны
Но мне же достаточно передавать ссылки
В си нет ссылок
*поинтер
Обсуждают сегодня