繁体   English   中英

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

[英]How do I merge two linked lists in C++?

昨晚我问了一个有关如何对C ++中的双链表进行sort()的问题。 我设法使其正常工作,但现在我想合并两个列表,但无法使其正常工作。 我没有太多代码,对不起。 我尝试的一切都完全没有道理。 我想知道是否有人可以通过我要提供的信息给我一些提示,从哪里开始或如何做。

这是我刚开始的时候:

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

我相信我只需要这些。

我在网上看了一些样本,但对我来说没有任何意义。 看来与我现在所拥有的完全不同。 显然,这比执行排序功能要容易得多,我几乎没有遇到任何麻烦。

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

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

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

看来您正在尝试不执行。 3这里。

在这种情况下,您可以

  1. 从当前列表的开头开始,然后转到下一个,直到到达最后一个元素
  2. 设置curr-> next = other_list.head
  3. 当前列表上的通话排序

但是,这将破坏原始列表。 我认为最好将它们复制到第三张列表中。

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

或者如果您使用的是C++ 11

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

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

如果这是您自己实现的,则只需获得列表之一的尾部,然后使用类似以下的方法:

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

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

我仍然对您的追求感到困惑,但这是我能想到的最基本的方法。 再说一次,我可能会完全离开。 祝好运

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM