Два связанных списка перевернуты, то есть указатель хвоста другой связанной цепной таблицы обращается от слияния из указателя хвоста одного связанного списка в другой связанный список. Ниже подробно представлены идея и код реализации изменения чередования двух связанных списков.
1. Описание проблемы
Ссылки A и B
A: 1-> 2-> 3-> 4
B: a-> b-> c-> d
Пожалуйста, отмените два связанных списка поочередно.
4-> D-> 3-> C-> 2-> B-> 1-> A
Определение типа узла следующим образом:
Classnode {public node Далее; 2. исходный код:
Два списка A и B передаются обратно в связанный список после обработки:
Node reverse_merge (узлы A, узлы B) {// a, b имеет только один узел, если (a.next == null) {a.next = b; .next; ; Три, анализ:
Программа разделена на три части -до цикла, цикл Whice и цикл Whice.
1) Обработка предыдущего связанного списка A и B
2) В то время как цикл -основная обработка части процесса обработки может быть повторена здесь.
Тем не менее, узел, где A расположен в специально обработанном A. Только для узла, где находится A, требуется следующая операция = нулевая операция, что означает, что первый атом в 1 должен быть реализован за пределами цикла.
Если вы используете метод 2, вам нужно только положить 1 пальцем в цикл. Следовательно, здесь используется атомная структура, описанная в 2.
Информация, требуемая атомной структурой
Когда мы переходим к определенному циклу, предполагая работу синего круга, в настоящее время состояние нашего связанного списка:
Более интуитивно понятный метод рисования:
Это включает 3 узла -2,3 и C. Красная часть - это метод ссылки, который мы хотим сделать. Чтобы связать C-> 2,3-> C, мы должны знать, что есть соответствующие указатели для записи их позиции. Поэтому перед циклом мы должны овладеть адресом этих трех элементов и после обработки, таким же образом, атомную структуру, которая необходимо обрабатывать таким же образом.
Например, следующий метод записывает адрес трех узлов, разработанных в этом цикле:
A, Na и B представляют указатель или ссылку на соответствующие узлы.
После завершения обработки вам необходимо записать узлы, связанные с следующей атомной структурой таким же образом, чтобы гарантировать, что цикл может быть выполнен в соответствии с единой логикой.
Эти операции назначения - это именно то, что делает средний код тела цикла. Кроме того, NextB определяется как промежуточная переменная в коде для записи адреса предыдущего узла D до отключения C-> D, поскольку C-C-2 потеряет контакт D. Эта промежуточная переменная необходима.
3) До всей цикла -решить проблему, вызванную подготовительной операцией
Мы не обращались с узлом А, потому что он слишком особенный, и нет подходящей атомной структуры, которая может включать его. Таким образом, мы поместили это за пределы цикла и готовимся к циркуляции.
После этого мы можем положить 1, 2 и B в цикл. Здесь есть только один узел A и B, которые также необходимо обрабатывать отдельно.
4) После всего цикла -окончательная обработка
Когда мы обнаруживаем, что связанный список B достигает конца, цикл закончился. Но в настоящее время есть узел обработки. Наш цикл остановится в этой атомной структуре:
В качестве окончательной операции нам необходимо вручную обработать этапы ссылки D-> 3,4-> D-D-это также, потому что необходимо найти обработку атомной структуры.
Это не полный способ, и есть много вещей, которые не были обработаны. Кроме того, структура данных узла не полностью определена, но это не в центре внимания этой статьи.
Через приведенный выше подробный анализ, я надеюсь, что все помогут всем понять методы и реализацию двух связанных альтернативных слияний списка.