【发布时间】:2015-08-13 07:09:33
【问题描述】:
所以,我在这里面临一个疑问。
我正在阅读《破解编码面试》这本书。下面的文字写在那里。
假设你有一个链表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.
我是不是走错地方了?
【问题讨论】:
-
Suppose you had a linked list a1->a2....->an->b1->b2....bn, and you want to rearrange it into a1->a2->...an->b1->b2....->bn.? -
抱歉打错了。更正了问题。我的错。
-
问题的标题与问题有什么关系。是的,这种技术可以用来组合两个链表。但是,在 Runner Technique 部分中没有提到两个链表。因此,编辑标题可能是一种改进。
标签: algorithm linked-list