gpt4 book ai didi

algorithm - Runner 技术组合两个相等的链表

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:20:24 25 4
gpt4 key购买 nike

所以,我在这里面临一个疑问。

我正在阅读《破解编码面试》一书。下面的文字写在那里。

假设你有一个链表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.

我是不是哪里错了?

最佳答案

n = 2。我们从一个列表开始:

a1 -> a2 -> b1 -> b2

p1 是一个“快速”指针,最初指向 head 的后继者。
p2 是一个最初指向头部的“慢速”指针。

      p1
a1 -> a2 -> b1 -> b2
p2

我们将 p1 移动两位,将 p2 移动一位,直到 p1 到达列表的末尾(没有下一个)。

                  p1
a1 -> a2 -> b1 -> b2
p2

p1 移回头部。

p1                  
a1 -> a2 -> b1 -> b2
p2

前进 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 为空,终止。

关于algorithm - Runner 技术组合两个相等的链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30546150/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com