Блог Майкова

«Информация на данном сайте предоставляется "КАК ЕСТЬ" без каких-либо гарантий и передачи прав. Мнения, высказанные здесь, являются отражением моего личного взгляда, а не позиции работодателя.»

Задачка

Очень распространенная задача на интервью в Майкрософт:

 

Есть связанный список. Нужно выяснить, не "сломался" ли он. Т.е. последний элемент стал указывать не на NULL, а на какой-то элемент посредине.

Простейшее решение - понятно. Проходим по списку, для каждого текушего элемента проходим еще раз и смотрим, был ли уже этот элемент в списке, или нет. Если был - значит зацикленый список, если дошли до NULL - значит нет. Сложность такого решения - квадрат длины списка.

Оптимизация - идти по списку и заносить элементы в хеш-таблицу. Тогда проверка, был ли уже элемент займет константное время и сложность такого решения линейна. Однако, требуется O(n) памяти для таблицы.

 

Существует линейное решение, не требуещее памяти. Напишу его в следующий раз, а если есть идеи - оставьте в комментариях.

 

Published Wednesday, June 21, 2006 7:51 PM by maykov

Comments

 

FFx00xF0 said:

Когда ждать линейное решениеи ? :)
September 16, 2006 2:43 PM
 

Блог Майкова said:

Решение задачи из предыдущего поста http://blogs.technet.com/maykov/archive/2006/06/21/438071.aspx
Заводим...
September 18, 2006 3:32 PM
 

maykov said:

Опубликовал
September 18, 2006 3:33 PM
Anonymous comments are disabled

© 2009 Microsoft Corporation. All rights reserved. Terms of Use  |  Trademarks  |  Privacy Statement
Microsoft
Page view tracker