@Programist18946

Как копировать список в си (C)?

Здравствуйте , дан список со значениями , как сделать его копию
Node* createList()//ввод списка с клавиатуры
{
Node* List; //создание вершины списка
List = NULL;
int N = 0;
int n = 0;
printf("Введите количество элементов: ");
scanf_s("%d", &N);
puts("Введите список");
for (int i = 0; i < N; i++)
{
printf("Элемент: ");
scanf_s("%d", &n);
List = add(List, n);
}
return List;
}

Node* add(Node* List, int n)//добавление элемента в список
{
if (List == NULL)//если список пуст,то создаем первый элемент
{
List = new Node; //выделяем память и заполняем поля
List->inf = n;
List->link = NULL;
}
else //иначе добавляем в конец
{
Node* last;
last = List;//переменная для хранения текущего узла, указатель на текущий узел
while (last->link)
{
last = last->link; //находим последний элемент
}
last->link = new Node; //выделяем память и заполняем поля

last->link->inf = n; //добавляем новый элемент
last->link->link = NULL;
}
return List;
}
  • Вопрос задан
  • 316 просмотров
Пригласить эксперта
Ответы на вопрос 2
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
Пройтись по списку, добавляя элементы в конец нового списка.
Только не надо использовать вашу функцию add - она каждый раз проходится по всему списку. Заведите отдельную переменную, которая будет указывать на конец создаваемого списка и добавляйте новый элемент к ней.
Ответ написан
Комментировать
CityCat4
@CityCat4
Внимание! Изменился адрес почты!
Брутально? Подсчитать размер области памяти, которую занимает список, выделить еще один такой же кусок и скопировать туда через memmove(), потом заадресоваться по новому адресу.
Но Вам так не пойдет, у Вас же учебный пример.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы