假设我们有两个双键循环列表。我们想在O(1)中反转它们。然后我们希望能够写出这样的信件。 (O(n)(以相反的顺序,因为它们是相反的)。很容易,但我们必须能够将这些列表合并为一个并写入其中。让我举几个例子:
让我们说你有两个输入列表。可以进行"操作": join(示例显示它是如何工作的),显示和反转: 好: 第一个例子:
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
连接和反向的时间复杂度为O(1),显示显然是O(n)。
答案 0 :(得分:1)
使用一个附加参数直接反转循环双链表:顺序
双链表的每个节点都有两个指针:前进和后退
我们还跟踪链表的end_point和start_point。反转列表基本上是交换start_point和end_point并颠倒顺序
order = -1 * order
tmp = start_point
start_point = end_point
end_point = tmp
合并列表与合并通常的双链表没有区别,但您必须考虑订单。你基本上有3个案件要处理: