IPB

Добро пожаловать, гость ( Вход | Регистрация )

> Правила раздела

Публикующим:
     1. Задачу можно опубликовать двумя способами:
          - создав для нее отдельную тему с информативным названием;
          - добавив задачу в готовый сборник (например «Бескрылки», «Мини-задачи», «Вопросы ЧГК») или создав свой (например, «Загадки от /для Светы»).
     2. Если вы публикуете задачу, решение которой не знаете, напишите об этом. По умолчанию считается, что вам известен правильный ответ и вы готовы проверять других игроков.
Решающим:
     1. В темах запрещается писать ответы и подсказки, если возможность открытого обсуждения не оговорена отдельно (в случае открытого обсуждения для текста следует использовать цвет фона или белый, оставляя другим игрокам возможность самостоятельного решения).
     2. Правильность решения можно проверить, написав личное сообщение автору.

> Как удалить элемент из списка?, программирование
Рейтинг  3
ierton
12.11.2010, 0:01
Сообщение #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
12.11.2010, 19:10
Сообщение #2


Участник
**

Группа: Пользователи Braingames
Сообщений: 100
Регистрация: 3.2.2010
Пользователь №: 19 190



QUOTE(ierton @ 12.11.2010, 0:01) *

Весь форум не читал, прошу прощения если задача с бородой. Говорят, что спрашивали на собеседовании в гугле.

Нужно реализовать удаление элемента односвязного списка, имея только указатель на удаляемый элемент (известно, что он не является последним). Другими словами, нужно сделать так, чтобы предыдущий элемент стал связан с следующим за данным.

Короче говоря:

struct Item { void* data; struct Item * next; } ;

void delete_item(struct Item * item)
{
???
}

Список конечный, признак последнего элемента - p.next == 0. Язык - С.


Так, не понял, а где указатель на начало списка? Про него ничего не сказано...

P.S. Понял, в этом вся фишка вопроса. Но в таком случае ответ не чистый. Никакой уверенности в том, что на указанные элементы не ссылается кто-то извне, нет. Стало быть этот момент нужно уточнять.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Powered by Java
12.11.2010, 21:24
Сообщение #3


Активный участник
***

Группа: Модераторы BrainGames
Сообщений: 544
Регистрация: 9.6.2008
Пользователь №: 8 397



QUOTE(Troublemaker @ 12.11.2010, 19:10) *

Так, не понял, а где указатель на начало списка? Про него ничего не сказано...

P.S. Понял, в этом вся фишка вопроса. Но в таком случае ответ не чистый. Никакой уверенности в том, что на указанные элементы не ссылается кто-то извне, нет. Стало быть этот момент нужно уточнять.


В идеале, есть public List, в нем куча методов для работы с данными и private структура/класс Item. Так что внешних ссылок быть не должно, а head хранится непосредственно в List, у которого и просят имплементировать удаление.
Кстати, проблему с последним элементом вполне возможно решить, но не средствами структуры, конечно.
PS: однонаправленные списки - ЗЛО! smile.gif smile.gif
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Troublemaker
12.11.2010, 21:33
Сообщение #4


Участник
**

Группа: Пользователи Braingames
Сообщений: 100
Регистрация: 3.2.2010
Пользователь №: 19 190



QUOTE(Powered by Java @ 12.11.2010, 21:24) *

В идеале, есть public List, в нем куча методов для работы с данными и private структура/класс Item. Так что внешних ссылок быть не должно, а head хранится непосредственно в List, у которого и просят имплементировать удаление.
Кстати, проблему с последним элементом вполне возможно решить, но не средствами структуры, конечно.
PS: однонаправленные списки - ЗЛО! smile.gif smile.gif

Тогда предлагаю "многонаправленные":

Есть список со случайными связями. То есть он однонаправленный (есть поле .next), кроме того, есть поле .random, которое ссылается на некий элемент из этого же списка. Задача: клонировать данный список (с сохранением связей). Ограничение: памяти использовать не больше, чем нужно для изначального списка и для нового.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Сообщения в этой теме
ierton   Как удалить элемент из списка?   12.11.2010, 0:01
Яростный Меч   Нужен элемент, предшествующий удаляемому. Потому и...   12.11.2010, 10:09
ierton   Нужен элемент, предшествующий удаляемому. Потому ...   13.11.2010, 12:41
De_Bill   Долговато Не проще ли, если у нас есть фактически ...   12.11.2010, 12:40
Powered by Java   Долговато Не проще ли, если у нас есть фактически...   12.11.2010, 13:46
Яростный Меч   Блин, точно! Ведь знал же когда-то (совсем нед...   12.11.2010, 18:10
Troublemaker   Весь форум не читал, прошу прощения если задача с...   12.11.2010, 19:10
Powered by Java   Так, не понял, а где указатель на начало списка? ...   12.11.2010, 21:24
Troublemaker   В идеале, есть public List, в нем куча методов дл...   12.11.2010, 21:33
De_Bill   "Задача: клонировать данный список (с сохране...   13.11.2010, 7:55
Powered by Java   "Задача: клонировать данный список (с сохран...   13.11.2010, 8:15
De_Bill   Ну там какой-то странный вариант дфса конечно полу...   13.11.2010, 8:56
Powered by Java   Ну там какой-то странный вариант дфса конечно пол...   13.11.2010, 9:14
De_Bill   Все зависит от того насколько сильно ограничение п...   13.11.2010, 10:37
Powered by Java   Все зависит от того насколько сильно ограничение ...   13.11.2010, 10:40
Яростный Меч   А надо за О(n) и без памяти лишней :) PS: предлаг...   13.11.2010, 10:56
Powered by Java   Есть вариант ответа, кому скинуть в личку - Вам и...   13.11.2010, 11:07
Яростный Меч   Полагаю, Troublemaker ответ знает, раз написал ту...   13.11.2010, 11:28
Troublemaker   Полагаю, Troublemaker ответ знает, раз написал ту...   15.11.2010, 16:20
Powered by Java   А не в той ли компании Вы работаете, где эту зада...   15.11.2010, 16:33
Troublemaker   Не в той :) Я не люблю компании, в которых формал...   15.11.2010, 16:39
Powered by Java   Эта задача давалась на собеседовании в более мелк...   15.11.2010, 16:43
Troublemaker   Не в той :) Я не люблю компании, в которых формал...   15.11.2010, 16:48
Яростный Меч   Для всех интересующихся уточню: на этот раз структ...   13.11.2010, 12:30


Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0 -

 



- Упрощённая версия Сейчас: 18.7.2025, 21:46
Яндекс.Метрика