C++ 反向双链表

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

假设我们有两个双键循环列表。我们希望在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 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?