如何在C ++中合并两个链接列表?

时间:2012-10-25 16:37:58

标签: c++ linked-list

我昨晚问了一个关于如何在{+ 1}中使用C ++中的双链表的问题。 我设法让它工作,但现在我想合并两个列表,但我不能 让它工作。我的代码不多,对不起。我试过的一切 绝对毫无意义。我想如果有人能给我一些提示 从哪里开始,或者如何做到这一点,我要去的信息 提供。

这就是我在开始时所拥有的:

sort()

我相信我只需要这些。

我在网上查看了一些例子,但这对我没有任何意义。它 看起来和我现在的情况有很大的不同。显然它应该是很多 比做一个排序功能更容易,我几乎没有遇到任何麻烦。

任何解释/提示将不胜感激!而且我再次感到抱歉 由于缺乏代码,我只是不知道从哪里开始。

3 个答案:

答案 0 :(得分:2)

您实际上可以通过多种方式执行此操作

  1. 获取两个已排序的列表,然后合并它们以便最终得到一个排序列表
  2. 获取两个已排序的列表,并创建第三个新列表,其中包含按排序顺序列出的两个列表中的元素
  3. 合并两个已排序/未排序的列表,然后对结果列表进行排序
  4. 看起来你正试图不做。 3在这里。

    在这种情况下,您可以

    1. 从当前列表的头部开始,然后转到下一个,直到到达最后一个元素
    2. 设置curr-> next = other_list.head
    3. 在当前列表中调用排序
    4. 然而,这将破坏原始列表。我认为将它们复制到第三个列表会更好。

答案 1 :(得分:1)

for_each(auto x in list2name)
{
list1name.push_back(x);
}

或者如果您正在使用C++ 11

for(auto x : list2name)
{
list1name.push_back(x);
}

答案 2 :(得分:0)

如果您已将std :: list用作链接列表,则可以始终使用现有的merge()函数http://www.cplusplus.com/reference/stl/list/

如果这是您自己实现的内容,只需获取其中一个列表的尾部并使用以下内容:

   tail = list_1.get_tail();
   tail.set_next(list_2.get_head())

基本上获取列表1中的最后一个条目,然后将下一个elemt设置为列表2的第一个元素。

我仍然对你所追求的事情感到困惑,但这是我能想到的最基本的方式。 然后,我可能会完全离开。 祝你好运