![]() |
Добро пожаловать, гость ( Вход | Регистрация )
Публикующим:
1. Задачу можно опубликовать двумя способами:
- создав для нее отдельную тему с информативным названием;
- добавив задачу в готовый сборник (например «Бескрылки», «Мини-задачи», «Вопросы ЧГК») или создав свой (например, «Загадки от /для Светы»).
2. Если вы публикуете задачу, решение которой не знаете, напишите об этом. По умолчанию считается, что вам известен правильный ответ и вы готовы проверять других игроков.
Решающим:
1. В темах запрещается писать ответы и подсказки, если возможность открытого обсуждения не оговорена отдельно (в случае открытого обсуждения для текста следует использовать цвет фона или белый, оставляя другим игрокам возможность самостоятельного решения).
2. Правильность решения можно проверить, написав личное сообщение автору.
![]() |
ierton |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Braingames Сообщений: 2 Регистрация: 12.8.2010 Пользователь №: 20 521 ![]() |
Весь форум не читал, прошу прощения если задача с бородой. Говорят, что спрашивали на собеседовании в гугле.
Нужно реализовать удаление элемента односвязного списка, имея только указатель на удаляемый элемент (известно, что он не является последним). Другими словами, нужно сделать так, чтобы предыдущий элемент стал связан с следующим за данным. Короче говоря: struct Item { void* data; struct Item * next; } ; void delete_item(struct Item * item) { ??? } Список конечный, признак последнего элемента - p.next == 0. Язык - С. |
![]() ![]() |
Troublemaker |
![]()
Сообщение
#2
|
Участник ![]() ![]() Группа: Пользователи Braingames Сообщений: 100 Регистрация: 3.2.2010 Пользователь №: 19 190 ![]() |
Весь форум не читал, прошу прощения если задача с бородой. Говорят, что спрашивали на собеседовании в гугле. Нужно реализовать удаление элемента односвязного списка, имея только указатель на удаляемый элемент (известно, что он не является последним). Другими словами, нужно сделать так, чтобы предыдущий элемент стал связан с следующим за данным. Короче говоря: struct Item { void* data; struct Item * next; } ; void delete_item(struct Item * item) { ??? } Список конечный, признак последнего элемента - p.next == 0. Язык - С. Так, не понял, а где указатель на начало списка? Про него ничего не сказано... P.S. Понял, в этом вся фишка вопроса. Но в таком случае ответ не чистый. Никакой уверенности в том, что на указанные элементы не ссылается кто-то извне, нет. Стало быть этот момент нужно уточнять. |
Powered by Java |
![]()
Сообщение
#3
|
Активный участник ![]() ![]() ![]() Группа: Модераторы BrainGames Сообщений: 544 Регистрация: 9.6.2008 Пользователь №: 8 397 ![]() |
Так, не понял, а где указатель на начало списка? Про него ничего не сказано... P.S. Понял, в этом вся фишка вопроса. Но в таком случае ответ не чистый. Никакой уверенности в том, что на указанные элементы не ссылается кто-то извне, нет. Стало быть этот момент нужно уточнять. В идеале, есть public List, в нем куча методов для работы с данными и private структура/класс Item. Так что внешних ссылок быть не должно, а head хранится непосредственно в List, у которого и просят имплементировать удаление. Кстати, проблему с последним элементом вполне возможно решить, но не средствами структуры, конечно. PS: однонаправленные списки - ЗЛО! ![]() ![]() |
Troublemaker |
![]()
Сообщение
#4
|
Участник ![]() ![]() Группа: Пользователи Braingames Сообщений: 100 Регистрация: 3.2.2010 Пользователь №: 19 190 ![]() |
В идеале, есть public List, в нем куча методов для работы с данными и private структура/класс Item. Так что внешних ссылок быть не должно, а head хранится непосредственно в List, у которого и просят имплементировать удаление. Кстати, проблему с последним элементом вполне возможно решить, но не средствами структуры, конечно. PS: однонаправленные списки - ЗЛО! ![]() ![]() Тогда предлагаю "многонаправленные": Есть список со случайными связями. То есть он однонаправленный (есть поле .next), кроме того, есть поле .random, которое ссылается на некий элемент из этого же списка. Задача: клонировать данный список (с сохранением связей). Ограничение: памяти использовать не больше, чем нужно для изначального списка и для нового. |
![]() ![]() |
![]() |
Упрощённая версия | Сейчас: 18.7.2025, 21:46 |