Итак, у меня есть сомнения.Техника бегунов для объединения двух равных списков ссылок
Я читал книгу «Cracking the encoding Interview». Там написано следующее.
Предположим, у вас был связанный список a1->a2....->an->b1->b2....bn
, и вы хотите переставить его в a1->b1->a2->b2->.....an->bn
. Вы не знаете длину связанного списка, но все, что вы знаете, это четное число.
(Здесь и связанные списки имеют одинаковую длину)
Вы можете иметь один указатель p1 (быстрый указатель) двигаться каждые два элемента для каждого один ход, что p2 делает. Когда p1 попадает в конец связанного списка, p2 будет в конечной точке. Затем переместите p1 назад и начните «плетение» элементов. На каждой итерации p2 выбирает элемент и вставляет его после p1.
Я не понимаю, как, когда p1 попадает в конец связанного списка, p2 будет находиться в средней точке. Так я представляю себе это, если n = 3 (длина = 6). Каждый шаг ниже представляет собой итерацию.
1. a1 (p1, p2)->a2->a3->b1->b2->b3
2. a1->a2 (p2)->a3 (p1)->b1->b2->b3
3. a1->a2->a3 (p2)->b1->b2 (p1)->b3
4. Index out of bounds error because p2 now points to a node after b3.
Я что-то не так?
'Предположим, у вас есть связанный список a1-> a2 ....-> an-> b1-> b2 ....bn, и вы хотите переставить его в a1-> a2 -> ... an-> b1-> b2 ....-> bn.'? – amit
Извините за опечатку. Исправил вопрос. Виноват. – Elliot