@famousman204

Как переместить данные по адресу?

Добрый день! Вопрос такой: как переместить данные из одной ячейки памяти?
Чтобы было понятнее у меня есть односвязный список типа такого:
typedef struct s_list
{
    void* data;
     struct s_list* next;
} t_list;

И функция которая удаляет элемент из списка
void delone(t_list** lst);
Возможно ли как то переместить указатель на Некст в ячейку где хранится указатель на лист?
Т.к. я хочу удалить элемент списка при этом не разрывая его(список) и не пробегая по списку с начала.
  • Вопрос задан
  • 53 просмотра
Пригласить эксперта
Ответы на вопрос 2
CityCat4
@CityCat4
Внимание! Изменился адрес почты!
Хм. Не уверен, что правильно понял, но перемещение любых данных откуда угодно куда угодно и сколько угодно (в пределах доступной памяти ессно) делается через memmove(). Штука универсальная, но опасная - весь расчет указателей, а также длины перемещаемого участка - забота программиста, вызов просто обрушит программу через SIGSEGV, если что-то будет передано не так.
Ответ написан
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
Не совсем понял вопрос, но, если вы имеете ввиду переписывания указателя на удаляемый элемент, то тут 2 подхода.

1) Если функция рекурсивная, то пусть она возвращает новую голову списка. Если текущий элемент удалять не надо, то перепишите next на результат вызова от этого next и возвращайте текущую запись. Если удалять надо, то отчистите память и возвращайте next.

2) Если функция работает циклом, что предпочтительнее, то вы можете просто помнить предыдущий элемент списка. Двигайте 2 указателя параллельно.
prev = cur;
cur = cur->next;
Ответ написан
Ваш ответ на вопрос

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

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