Обратный список


Вывести элементы односвязного списка в обратном порядке

08.02.2020, 15:06

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

Элементы списка при присваивании передаются в обратном порядке
Такая проблема, вывожу текст «List lst;», все ок. Но когда присваиваю List listik = lst; и вывожу.

Двусвязный список, почему не выводит элементы списка в обратном порядке?
Подскажите в чем ошибка, почему не выводит элементы списка в обратном порядке (выводит только один.

Как вывести данные из связного списка в порядке обратном введению?
Доброго времени суток! Решал задачу по созданию связного списка. То есть, в память вносятся данные.

Вывести элементы массива в обратном порядке.
Скоро экзамен , кто чем может ) Помоги ближнему , ибо смех продлевает жизнь. ) 13. Дан.

Обратный список дел

15 ноября 2013 в 20:25

Похлопайте себя по спине с Recur, обратным списком дел. Поскольку список достижений приносит гораздо больше удовлетворения, чем нескончаемый поток задач.

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

Видите ли, все дело в том, что в обычном списке дел вы ежедневно видите то, что в нем не сделано. Каждый день вы сталкиваетесь с растущим списком всех тех вещей, которые вы не сделали. Но это не лучший способ, чтобы так жить.

Если вы когда-то сделали что-то, затем вернитесь и вставьте его в свой список, и теперь вы можете вычеркнуть это, вы должны попробовать Recur, приложение для iPhone всего за $1.

Recur — это список дел, которые вы сделали, и когда вы их сделали. Когда вы будете делать одно из них еще раз, вы можете добавить Tally, и таймер начнет отсчет сначала.

Recur отлично подходит для тех вещей, которые вы знаете, что должны делать регулярно, но вы по какой-то причине не достаточно дисциплинированный, чтобы делать их по расписанию, или вы просто не хотите тянуть себя в болото с дополнительными сроками.

Смена постельного белья. Мытье полов. Полив растений. Звонок своему лучшему другу. Купить мороженое детям. Пропылесосить автомобиль. Это те вещи, которые прекрасно поддаются отслеживанию.

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


Теперь вы всегда будете знать, сколько времени прошло с момента как вы покормили рыбок.

Обратный список

Давно хотел начать записывать задачки с собеседований и не только, но все как-то не получалось. Если трудно что-то начать, начни с самого легкого. Итак одна из простейших задач, тем не менее я умудрился запутаться на одном из собеседование — ревертнуть список.

Итак, входные данные: Дан односвязный список. Результат: получить обратный список (ревертнуть его).

Первое, что надо сделать — это не спешить ( чем я сам грешу ), а задать уточняющие вопросы, а именно:

  • Циклический ли это список ( последний элемент указывает на начало )? Если список циклический, то нужно воспринимать начальную вершину как конец списка.
  • Есть ли петли(loops) в этом списке? В том смысле, что конец ссылается на середину списка. В этом случаем надо запоминать вершины которые проедены ( можно по адресу и в массив ) и прежде чем делать следующею итерацию, смотреть не посещали ли эту вершину. Если да то, значит мы пришли к концу. Хотя что за реверс списка это будет не понятно.
  • Фиксированное число элементов в этом списке? ( реальный случай ) Если число фиксированное и оно не большое(3-5), то значит смотрели на внимательность. Тут все просто надо руками ревертнуть эти объекты.
  • Нужно ли сохранять оригинальный список? Тогда нельзя изменять оригинальный список, а создавать новый и возвращать указатель на новый.

Если на все эти вопросы ответ — нет, то только тогда можно приступать к разработке алгоритма.

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

Илон Маск рекомендует:  Примеры использования регулярных выражений на php

Ладно, сам алгоритм прост до безобразия:

Подробно можно посмотреть в revert_list.c.

Вот и все, но я даже на этом умудрился затупить на одном из собеседований — так что не расслабляйтесь, сглупить можно всегда :) .

Совсем забыл, я люблю смотреть, а как эта штука реализована в STL. Сразу хочу сказать, что в STL много вариантов reverse, но нам нужно только односвязный (forward) список:

Рекурсивный обратный список

Мне нужно написать алгоритм с именем reverseNodes, который принимает RefToNode в качестве параметра и recuriveley переворачивает список, в котором был создан заголовок, который я придумал.

Алгоритм обратного (rList)

восстанавливает элементы в списке

Pre: rList :: ссылка на список, подлежащий обращению


Пост: элементы в rList поменялись местами

if (rList! = NULL)
reverseNodes (rList -> head)
вернуть

Мне нужно найти способ написать это psuedocode и найти время сложность

Решение

Иногда проще создать какой-то неформальный алгоритм тарабарщины, если начать
с идеей, выраженной четко. Затем, запутывайте и произносите слова, пока у вас что-то не получится, ваш профессор с радостью примет.

Итак, давайте начнем с нашей общей идеи алгоритма:

…и начать говорить:

  1. пусть результат = пустой список
  2. let l = список, который мы хотим изменить
  3. если l пустой список, перейдите к 7
  4. let head = l.front, l = l.pop_front ()
  5. result.push_front head
  6. перейти к 3
  7. l = результат

Шаги 3..6 могут быть легко выражены как рекурсивная функция:

Поскольку мы хотим создать иллюзию in-place.reversal, наша функция reverse_list

Альтернативное решение

Мы также можем сделать это по-другому:

В основном это говорит о том, что перевернутый список — это передний элемент исходного списка, добавленный к обратной стороне остальных.

Перевод алгоритма в бессмысленную форму дает:

Обратите внимание, что это не хвостовое рекурсивное решение.

Увеличиваем продуктивность, даже если ты ленивая жопа (обратные списки дел)


Люди рефлексируют на тему достижений, результатов редко («результаты за год» и т.п.), либо вследствие жизненных событий (встретились с иностранцем – поняли, что английский так и не знаем), в остальное время мы не грузим свой мозг.

Это приводит к циклу:

  • Мы осознаем, что недостаточно делаем или заняты не тем слишком поздно.
  • По этой же причине не успеваем вовремя принять меры
  • Страдаем

Строить выводы о своих результатах только на больших временных отрезках – ошибка.
Правильно – отслеживать на дневных или хотя бы недельных отрезках свое движение к цели. Это поможет вовремя обратить внимание на отставания, принять меры.

Проводить мини-ретроспективу следует с какой-либо периодичностью и лучше это будет в каком-то виде автоматизировано.

Я практикую следующее: геймификация целей (будет отдельным постом) и обратные списки дел. Это помогает концентрироваться на полезной деятельностью и видеть свой ежедневный прогресс. Обратный список дел выглядит так:

Мы видим что сделали за день, по какому направлению у нас просадка, например, что мы не занимались английским всю неделю. Мы начинаем хотеть каждый день выполнять X задач, чтобы ячейка результата стала зеленой. И никаких списков невыполненных дел.

Таск-трекером же теперь можно пользоваться для более высокоуровневых задач, или вообще заменить его гугл календарем.

Заключение:

Описанный метод не панацея. Это лишь вариант, как организовать себя. Он может ужиться, или нет. Попробуй (файл -> копия, дальше сам отредактируй).

Напоследок, видео для мотивации (которое по идеи является промо сервиса, но не суть)

Обратный список

Задача состоит в том, чтобы перевернуть связанный список, поэтому я создаю связанный список, затем распечатывается, затем вся обратная функция, а затем печатаю его во второй раз. Однако второй отпечаток пуст. Я думаю, что здесь проблемы с указателями, кто-нибудь может объяснить? Благодарю.

Результат, который я получаю от консоли:

где второй printLinkedList ничего не печатает. Удивление, где проблема. Благодарю.

Глядя на вашу функцию, чтобы обратить вспять список, который у вас есть


вы никогда не меняете next указатель, но дважды меняете prev .

Обратные вызовы на примере списка домашних дел

Если вы когда-нибудь стирали, то легко поймёте, как работают обратные вызовы (callback).

На днях я прочитал блестящую, весёлую и лёгкую для понимания статью Кевина Кононенко про MVC-фреймворки, где он объясняет парадигму Модель-Представление-Контроллер (MVC) через заказ напитков в баре. Это было одно из лучших объяснений в программировании.

Я оценил эту статью, так как она написана без налёта снобизма. Это заставило задуматься, почему многие опытные программисты не могут помочь новичкам без высокомерного отношения?.

Я преподаю английский язык в Северной Корее и думаю, что учителям следует постоянно рассуждать как Кевин. Сейчас не одобряется подход, когда сухо объясняется теория и грамматика иностранного языка без контекста, поэтому хорошие учителя стараются преподавать иностранный язык с помощью историй, фильмов, музыки и картинок.

Эта методология преподавания развивалась под влиянием британских лингвистов в 80-е годы. На ней основывается методика преподавания современного иностранного языка. Сейчас она становится актуальной и для обучения языкам программирования.

Мне далеко до Кевина, он объясняет настолько прекрасно, что этот уровень недосягаем. Но я всё равно попробую на примере обычных домашних дел показать, как работают асинхронные функции обратного вызова в JavaScript.

Илон Маск рекомендует:  Что значит статус Онлайн и Оффлайн

Синхронный список дел для любимого

Скажем спасибо моей жене, которая выполняла двойную работу по дому, пока я работал и писал код. Теперь я должен ей много времени.

Обычно я помогаю по дому в воскресенье, и список дел выглядит так:

  1. Постирай бельё.
  2. Искупай собаку.
  3. Отсортируй мусор.
  4. Сбалансируй бюджет.
  5. Подумай, что приготовить на ужин.

Техническая сторона: по сути, JavaScript — это синхронный язык программирования, то есть он работает с одной строкой кода одновременно. Он не может перейти к следующей строке кода, пока не будет выполнена текущая строка. Рассмотрим пример:

А теперь представьте, как бы я выполнял свою работу синхронно в реальной жизни. Что произойдёт? Как это будет выглядеть?

Если вы вернётесь к моему списку, то увидите, что стирка — это первый пункт. Обычно она занимает около 35 минут в обычном режиме и ещё 45 минут ожидания, пока всё высушится. Целых 80 минут я бы просто сидел, не занимаясь ничем другим, так как жду пока закончится стирка.

Вот как это выглядит в псевдокоде:


Не очень продуктивно, правда? В реальной жизни взрослые люди слишком заняты, чтобы так тратить время, поэтому они будут заниматься всеми делами асинхронно. Они запустят стирку и продолжат делать другие задачи из списка, вернувшись к ней только по окончании цикла стирки.

Этот возврат к стирке после её завершения, аналогичен функциям обратного вызова (callback function) в JavaScript, и наша стиральная машина, в буквальном смысле, вызывает нас назад звонком или гудком. Это позволяет заняться другими домашними делами, а затем закончить стирку, когда машинка завершит работу.

Асинхронный список дел для любимого

Давайте снова попробуем выполнить наши дела, но теперь сделаем это асинхронно. Вот как это выглядит в псевдокоде:

Как и статья Кевина, эта статья только проясняет понятие обратных вызовов. Если вы хотите практическое руководство, то прочтите «Ад обратных вызовов».

Ваша очередь

Будет проще разобраться, если вы начнёте переносить абстрактные концепции на реальные ситуации. Возможно, вы делаете что-то напоминающее синхронный и асинхронный код дома, в школе или на работе? Напишите об этом в комментариях.

Обратный список

Давно хотел начать записывать задачки с собеседований и не только, но все как-то не получалось. Если трудно что-то начать, начни с самого легкого. Итак одна из простейших задач, тем не менее я умудрился запутаться на одном из собеседование — ревертнуть список.

Итак, входные данные: Дан односвязный список. Результат: получить обратный список (ревертнуть его).

Первое, что надо сделать — это не спешить ( чем я сам грешу ), а задать уточняющие вопросы, а именно:

  • Циклический ли это список ( последний элемент указывает на начало )? Если список циклический, то нужно воспринимать начальную вершину как конец списка.
  • Есть ли петли(loops) в этом списке? В том смысле, что конец ссылается на середину списка. В этом случаем надо запоминать вершины которые проедены ( можно по адресу и в массив ) и прежде чем делать следующею итерацию, смотреть не посещали ли эту вершину. Если да то, значит мы пришли к концу. Хотя что за реверс списка это будет не понятно.
  • Фиксированное число элементов в этом списке? ( реальный случай ) Если число фиксированное и оно не большое(3-5), то значит смотрели на внимательность. Тут все просто надо руками ревертнуть эти объекты.
  • Нужно ли сохранять оригинальный список? Тогда нельзя изменять оригинальный список, а создавать новый и возвращать указатель на новый.

Если на все эти вопросы ответ — нет, то только тогда можно приступать к разработке алгоритма.

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

Ладно, сам алгоритм прост до безобразия:

Подробно можно посмотреть в revert_list.c.

Вот и все, но я даже на этом умудрился затупить на одном из собеседований — так что не расслабляйтесь, сглупить можно всегда :) .


Совсем забыл, я люблю смотреть, а как эта штука реализована в STL. Сразу хочу сказать, что в STL много вариантов reverse, но нам нужно только односвязный (forward) список:

Значение слова « Обратный »

В словаре Ожегова

ОБРАТНЫЙ, -ая, -ое. 1. Направленный в сторону, противоположную какому-то движению, ведущий назад. О. путь. Обратное движение колеса. Туда и обратно (нареч.). О. билет (железнодорожный билет, годный для поездки обратно или туда и обратно). 2. Противоположный другой, наружной стороне, не лицевой. Обратная сторона монеты. 3. То же, что противоположный (во 2 знач.). О. смысл. Убедить в обратном (сущ.; переубедить). 4. В математике: такой, при к-ром увеличение одного вызывает уменьшение другого и наоборот. Обратная зависимость. Обратная пропорциональность. * Обратный адрес — адрес отправителя. Обратная сила закона (спец.) — распространение действия закона на то, что произошло до его издания. Обратный словарь (спец.) — словарь, в к-ром слова расположены по алфавиту окончаний.

Илон Маск рекомендует:  ShortString - Тип Delphi

В словаре Ефремовой

Ударение: обра́тный прил.

    1. Ведущий или направленный назад, к исходному пункту (о движении, перемещении).
    2. Связанный с движением в обратном направлении.
  1. Приводящий к прежнему, исходному состоянию.
  2. Оказывающий встречное, ответное воздействие на что-л . 4)
    1. Обращенный в другую, противоположную сторону.
    2. Противоположный по духу, характеру, свойствам.
  3. Оборотный, изнаночный.
  4. Такой, при котором увеличение одного вызывает уменьшение другого, и наоборот.

В словаре Д.Н. Ушакова

ОБРА́ТНЫЙ, обратная, обратное.
1. Ведущий назад. Обратный путь. Обратный ход. Обратное движение. В обратном направлении.
| Возвращающийся назад (·разг. ). Ехать на обратных лошадях. Обратный поезд. «Вернуться из города я могу пешком, а не то к обратному мужичку на телегу подсяду.» А.Тургенев. «Ехал парень молодой, ямщичок обратный.» Некрасов.
| Приводящий к прежнему, исходному состоянию. Обратное развитие. Обратный прием уволенных. Обратное получение денег.
2. Являющийся изнанкой; не лицевой, оборотный. Обратная сторона медали.
3. Противоположный. «Обратный же способ рассуждения, нередко встречающийся у социал-демократов правого крыла с Плехановым во главе их, — ·т.е. стремление искать ответов. Обратный же способ рассуждения, нередко встречающийся у социал-демократов правого крыла с Плехановым во главе их, — ·т.е. на конкретные вопросы в простом логическом развитии общей истины об основном характере нашей революции, есть опошление марксизма и сплошная насмешка над диалектическим материализмом.» Ленин. Обратный смысл. Лекарство производит совсем обратное действие. Расположить в обратном порядке.
4. Такой, при котором увеличение одного вызывает уменьшение другого и наоборот ( мат. научн. ). Эти явления находятся в обратной зависимости. Обратная пропорция. Обратное отношение.
Обратная сила (закона; юр. ) — распространение действия закона на факты, предшествовавшие его опубликованию. Многие законы имеют обратную силу. Обратная величина или обратное число ( мат. ) — величина, получающаяся от деления единицы на данную величину. 2/3 и 3/2 есть обратные числа. Обратный билет (·ж.-д.) — билет, действительный для поездки в оба конца, туда и обратно.

В словаре Синонимов


противоположный, инверсный, контрарный, возвратный, попятный, задний, оборотный, перевернутый, полярный; инверсионный, противный, другой, регрессный, ретроградный, исподний, изнаночный. Ant. прямой

В словаре Синонимов 2

прил1. возвратный, попятный, заднийнаправленный в сторону, противоположную той, в направлении которой совершалось предшествующее движение2. противоположный, полярный, противныйсовершенно несходный с кем-либо, чем-либо

В словаре Синонимов 3

пуститься в обратный путь.

В словаре Синонимы 4

возвратный, задний, инверсионный, исподний, оборотный, полярный, попятный, противный, противоположный, регрессный, ретроградный

обратный список — схема — scheme

Я пытаюсь изменить список, вот мой код:

поэтому, если я вхожу (обратный) (1 2 3 4)), я хочу, чтобы он появился как (4 3 2 1), но прямо сейчас это не дает мне этого. Что я делаю неправильно и как я могу это исправить?

    3 8
  • 21 окт 2020 2020-10-21 18:55:01
  • user2036340

8 ответов

На самом деле нет необходимости добавлять или заполнять тело кучей лямбда.


  • 21 окт 2020 2020-10-21 18:55:03
  • Ciro Costa

Еще один ответ, похожий на Оскара. Я только начал изучать схему, поэтому извините меня, если вы найдете проблемы:).

  • 21 окт 2020 2020-10-21 18:55:03
  • Jay Rajput

Я думаю, что лучше использовать append вместо cons

эта другая версия с хвостовой рекурсией

  • 21 окт 2020 2020-10-21 18:55:02
  • Salvatore Rapisarda

Это работает, но это не хвостовая рекурсивная процедура:

  • 21 окт 2020 2020-10-21 18:55:02
  • Nico Mkhatvari

Здесь решение с использованием процедуры build-list :

  • 21 окт 2020 2020-10-21 18:55:02
  • kelly

Вот рекурсивная процедура, описывающая итеративный процесс (хвостовой рекурсивный) для обращения вспять списка в схеме

Использование модели замещения для (reverse (список 1 2 3 4))

Вот рекурсивная процедура, описывающая рекурсивный процесс (не хвостовой рекурсивный) для обращения вспять списка в схеме

Использование модели подстановки для (reverse2 (список 1 2 3 4))

  • 21 окт 2020 2020-10-21 18:55:02
  • Sergiu Starciuc

Рекурсивный подход хвоста с использованием имени let :

Это в основном тот же подход, что и вспомогательная функция с аргументом аккумулятора, как и в ответе Оскара, где привязка loop после let позволяет помещать во внутреннюю функцию, которую вы можете вызвать.

  • 21 окт 2020 2020-10-21 18:55:01
  • Jack

Естественный способ повторного просмотра списка — не лучший способ решить эту проблему. Использование append , как было предложено в принятом ответе, на которое указывает @lancery, тоже не является хорошей идеей — и в любом случае, если вы изучаете свой путь в Схеме, лучше всего, если вы попытаетесь реализовать решение самостоятельно, я покажу вам что делать, но сначала совет — не используйте list в качестве имени параметра, а встроенную процедуру, и вы переписываете ее. Используйте другое имя, скажем, lst .

Проще всего перевернуть список с помощью вспомогательной процедуры, которая накапливает результат consing каждого элемента во главе результата, это будет иметь значение для изменения списка — кстати, вспомогательная процедура является хвостовой рекурсивной. Вот общая идея, заполните пробелы:

Конечно, в реальной жизни вы бы не реализовали reverse с нуля, там есть встроенная процедура.

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL