C++ 反向双链表
假设我们有两个双键循环列表。我们希望在O(1)中反转它们。然后我们希望能够写这样的信。(O(n)(按相反的顺序,因为它们是颠倒的)。这很容易,但我们必须能够将这些列表合并成一个列表并在其中写入。让我举几个例子: 假设您有两个输入列表。可以使用“操作”: 连接(示例显示其工作原理)、显示和反转: 好 啊: 第一个例子:C++ 反向双链表,c++,C++,假设我们有两个双键循环列表。我们希望在O(1)中反转它们。然后我们希望能够写这样的信。(O(n)(按相反的顺序,因为它们是颠倒的)。这很容易,但我们必须能够将这些列表合并成一个列表并在其中写入。让我举几个例子: 假设您有两个输入列表。可以使用“操作”: 连接(示例显示其工作原理)、显示和反转: 好 啊: 第一个例子: 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 se
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)。使用一个附加参数反转循环双链接列表是直接的:顺序 双链接列表的每个节点都有两个指针:向前和向后
- 如果强>阶< /强>为1,则认为<强>向前/<强>是指向 下一个元素 < >如果<强> > <强>为-1,我们认为<强>向后> /强>是指向 下一个元素
order = -1 * order
tmp = start_point
start_point = end_point
end_point = tmp
合并列表与合并通常的双链接列表没有什么不同,但您必须考虑顺序。您基本上有3种情况需要处理:
问题是什么?你的问题是什么?如何实现这个操作。@user3487199这太宽泛了…你至少应该展示你自己尝试过的东西,并且可能会问你在实现中遇到的特殊问题。为什么不使用
bool order;
和order=!order;
?使用布尔值也是一个选项。我喜欢-1,1的想法,因为它可能与速度有关。这只是个人偏好,仅此而已。这是一个很好的理由。=]嗯,但如何处理这种情况?(我要求3个案例)此外,我的列表有head,那么我应该如何处理head?