所以,我在这里面临着一个疑问。
我正在读《破解编码面试》一书。那里写着下面的文字。
假设你有一个链表a1->a2....->an->b1->b2....bn
,并且您想将其重新排列为a1->b1->a2->b2->.....an->bn
。你不知道链表的长度,但你只知道它是一个偶数。
(这里两个链表的长度相同)
对于 p2 的每一次移动,您可以让一个指针 p1(快速指针)每两个元素移动一次。当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.
我是不是去错地方了?
Let n = 2
。我们从一个列表开始:
a1 -> a2 -> b1 -> b2
Let p1
是一个“快速”指针,最初指向 head 的后继者。
Let p2
是一个最初指向头部的“慢”指针。
p1
a1 -> a2 -> b1 -> b2
p2
We move p1
由两个和p2
减一直到p1
到达列表末尾(没有下一个)。
p1
a1 -> a2 -> b1 -> b2
p2
Move p1
回到头部。
p1
a1 -> a2 -> b1 -> b2
p2
Advance p2
.
p1
a1 -> a2 -> b1 -> b2
p2
“编织”开始。
取指向的元素p2
并在之后移动它p1
。进步p1
插入元素后。
p1
a1 -> b1 -> a2 -> b2
p2
取指向的元素p2
并在之后移动它p1
。进步p1
插入元素后。
p1
a1 -> b1 -> a2 -> b2
p2
p1
为空,终止。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)