合并双链表的特殊情况

时间:2014-04-07 19:54:10

标签: c++ c++11

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

可以直接反转循环双链表

双链表的每个节点都有两个指针:前向和后向

  • 如果order为1,我们认为forward是指向下一个元素的指针
  • 如果order为-1,我们认为向后是指向下一个元素的指针

我们还跟踪链表的end_point和start_point。反转列表基本上是交换start_point和end_point并颠倒顺序

order = -1 * order
tmp = start_point 
start_point  = end_point
end_point = tmp

合并列表与合并通常的双链表没有区别,但您必须考虑订单。你基本上有3个案件要处理:

  1. 两人正在前进
  2. 两人都向后移动
  3. 一个向前移动而另一个向后移动
  4. 如何实施? 这种情况是一个向前移动而另一个向后移动

0 个答案:

没有答案