0

昨晚我问了一个关于如何sort()在 C++ 中创建双链表的问题。我设法让它工作,但现在我想合并两个列表,但我无法让它工作。我没有太多代码,对不起。我尝试的一切都毫无意义。我只是想如果有人可以用我将提供的信息给我一些关于从哪里开始或如何做到这一点的提示。

这是我一开始的:

void next() { if (curr != tail) curr = curr->next; }

我相信我只需要这些。

我在网上看了一些例子,但对我来说没有任何意义。它似乎与我现在拥有的如此不同。显然它应该比做一个排序功能容易得多,我几乎没有遇到任何麻烦。

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

4

3 回答 3

2

您实际上可以通过多种方式做到这一点

  1. 获取两个排序列表,并从字面上合并它们,以便最终得到一个排序列表
  2. 获取两个排序列表,并创建第三个新列表,其中包含两个列表中的元素并按排序顺序排列
  3. 合并两个已排序/未排序的列表,然后对结果列表进行排序

看起来你试图不做。3 这里。

在这种情况下,您可以

  1. 从当前列表的头部开始,直到到达最后一个元素
  2. 设置 curr->next = other_list.head
  3. 对当前列表调用 sort

然而,这会破坏原始列表。我认为最好将它们复制到第三个列表中。

于 2012-10-25T16:52:08.437 回答
1
for_each(auto x in list2name)
{
list1name.push_back(x);
}

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

for(auto x : list2name)
{
list1name.push_back(x);
}
于 2012-10-25T17:04:23.357 回答
0

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

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

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

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

我仍然有点困惑你在追求什么,但这是我能想到的最基本的方式。再说一次,我可能完全离开了。祝你好运

于 2012-10-25T16:52:47.390 回答