假设我们有两个双键循环列表。我们想在O(1)中反转它们。然后我们希望能够写出这样的信件。 (O(n)(以相反的顺序,因为它们是相反的)。很容易,但我们必须能够将这些列表合并为一个并写入其中。让我举几个例子:
让我们说你有两个输入列表。有"操作":join(示例显示它是如何工作的),显示和反转:OK:第一个例子:
L1: a b c d e
L2: f g h i j
Display L1 ( result: ) a b c d e
Join L1 L2 ( attach the second to the end of the first)
Display L1 : a b c d e f g h i j
Reverse L1 ( reversing )
Display L1 : j i h g f e d c b a
第二名:
L1 a b c
L2 d e f
L3 w
Reverse L1
Join L1 L2
Display L1: c b a d e f
Join L1 L3:
Display L1 : c b a d e f w
考虑一下:
使用一个附加参数:order
双链表的每个节点都有两个指针:前向和后向
我们还跟踪链表的end_point和start_point。反转列表基本上是交换start_point和end_point并颠倒顺序
order = -1 * order
tmp = start_point
start_point = end_point
end_point = tmp
合并列表与合并通常的双链表没有区别,但您必须考虑订单。你基本上有3个案件要处理:
如何实施? 这种情况是一个向前移动而另一个向后移动