Меня спросил один из моих старших руководителей: можно ли перевернуть односвязный список без использования цикла? Если да, то как? Его улыбка, казалось, говорила мне, что это возможно, но я ничего не мог придумать. Кто-нибудь думал об этом раньше?Связанный список обратный без использования цикла?
ответ
Можно отменить двойной связанный список в O (1) путем замены его head
и tail
указатели, и (в зависимости от реализации) установление своего рода флаг, который скажет, что список должен быть теперь повторяется назад (т. е. следуя указателям back
для повторения итерации вперед и следуя указателям next
, чтобы итератировать назад).
Что касается односвязного списка, я считаю, что его невозможно отменить быстрее, чем O (n).
В STL есть итераторы rbegin() и rend() для обхода коллекций в обратном порядке. Но он не будет работать для одного связанного списка.
подход в рекурсии
struct node {
int value;
struct node* next;
};
struct node** _reverse(struct node* n)
{
if (NULL != n->next)
*_reverse(n->next) = n;
return &(n->next);
}
// this is the entry
void reverse(struct node* head)
{
*_reverse(head) = NULL;
}
Вы уверены, что этот код будет работать? Мысленно пробуем его с тремя списками элементов A, B, C и get * (& nullptr) = B. – AMA
@AMA Просто потому, что 'c-> next == nullptr' не означает, что' * (& c-> next) 'является то же, что и '* (& nullptr)'. 'c-> next' имеет свой адрес. – neuront
ага! Это элегантно. Спасибо, что объяснили. – AMA
- 1. Как распечатать обратный связанный список без использования рекурсии в Java?
- 2. рекурсивно обратный связанный список без глобальной переменной
- 3. Learning Обратный Связанный список
- 4. Обратный двойной связанный список
- 5. обратный связанный список?
- 6. обратный связанный список рекурсивно
- 7. Связанный список рекурсивный обратный
- 8. Обратный одиночный связанный список
- 9. Циркулярно связанный список удаляет хвост без цикла
- 10. скопируйте связанный список ... без использования клона
- 11. Связанный список без использования коллекций в Java
- 12. Обратный связанный список в java
- 13. Обратный строковый связанный список рекурсивно
- 14. Связанный список обратный не работает ....?
- 15. Связанный список без дубликатов
- 16. Как скопировать связанный список в другой список без использования рекурсии
- 17. Связанный список без struct
- 18. Обратный список без обратной команды
- 19. обратный связанный список с использованием ошибки рекурсии
- 20. Обратный связанный список в паре в Java
- 21. Обратный односвязный список через Связанный стек
- 22. обратный двойной связанный список с использованием рекурсии
- 23. обратный связанный список с использованием рекурсии
- 24. Обратный рекурсивно связанный список в Java
- 25. обратный связанный список в рекурсивной функции C#
- 26. Реализация связанного списка в JAVA (обратный без использования итератора)
- 27. Как реализовать связанный список в ссылке без использования указателя
- 28. Как добавить значения в связанный список без использования «->»?
- 29. Проверить связанный список как Palindrome Без использования STACK
- 30. Как вручную реализовать Связанный список в Java без использования конструктора?
вы имеете в виду, что мы можем сделать это быстрее, чем O (п)? или вы хотите сказать, что мы можем сделать это с рекурсией? –
или вы также можете сделать это с помощью goto –
@PetarPetrovic, Goto кажется интересным. Расскажи мне больше. –