【问题标题】:How to use a link list nodes to modify another linked list如何使用链表节点修改另一个链表
【发布时间】:2012-10-14 04:23:54
【问题描述】:

我正在尝试使用链表实现来修改另一个链表。 这是我正在尝试做的一个示例。

list<int>list1;
list<int>list2;

list1.push_back( 1 );   // < --- want to modify this list
list1.push_back( 2 );

list2.push_back( 1 );   // with this list

简而言之,我想使用 list2 作为一种变量来修改 list1。我做了一些研究,好像我无法像数组一样访问列表的节点。是否有一个容器可以让我轻松地添加和删除节点并与其他容器进行比较和修改?我在想集合可能是一种选择,但似乎我也无法访问集合中的值。任何帮助或证据都会很棒。提前致谢。

编辑:::

我正在寻找创建一个数独求解器。我将所有 81 位数字(空白和给定)放入“链表”中。我现在希望从代表 1 个单元格的每个“列表”中删除可能的候选人。

例如 列表列表1; listlist2;

list1.push_back( 1 );  
list1.push_back( 2 );

list2.push_back( 1 );   

我现在想像这样使用 list2

list1.remove( list2(?) );  // < -- this obviously isn't possible due to how nodes are stored.

我希望这能解决我的问题。这是我用来解决简单数独的方法,稍后我将实施蛮力技术。

【问题讨论】:

  • std::deque 可能就是您要找的。​​span>
  • 用另一个容器修改容器是什么意思?
  • modify 是什么意思?您能否举例说明修改后列表的前后状态?
  • 我刚刚搜索了“deque”是什么。我认为这对我没有多大帮助,因为它似乎具有与链接列表相同的功能,除非我从错误的类别中读取。或者,也许,我的例子不够具体,无法解释我的问题。我会编辑它。
  • 完全不清楚您要做什么。

标签: c++ stl linked-list implementation


【解决方案1】:

由于您的列表不会太长,我认为使用list::remove_if() 是您最好的选择。

使用辅助功能:

bool IsInList2(int el)
{
  return std::find(list2.begin(), list2.end(), el) != list2.end();
}

并在您的代码中使用它:

list1.remove_if(&IsInList2);

【讨论】:

  • 谢谢。我也会试试这个。在查看 stl “list” 库时,我从未注意到“remove_if”函数。
【解决方案2】:

这是一种方式,毫无疑问还有其他方式。这确实取决于您的具体情况。例如,如果您的列表已排序,则有比这更好的方法。

list<int> list1 = ...;
list<int> list2 = ...;
for (list<int>::const_iterator i = list2.begin(); i != list2.end(); ++i)
  list1.remove(*i);

【讨论】:

  • 谢谢,我会试试看。
【解决方案3】:

我不知道你修改容器的想法是什么,也许你的意思是参考。将其用作参考变量:

list<int> list1;
list<int>& list2 = list1;

list2.push_back(1); //<--- modifies list1

或者使用指针:

list<int> list1;
list<int>* list2 = &list1;

list2->push_back(1); //<--- modifies list1

阅读指针Here

【讨论】:

  • 或指针变量。我猜 OP 很困惑,因为没有像数组那样自动转换为指针。
  • 我认为主要问题是我正在尝试编写一个我不知道哪个节点可能包含什么值的算法。节点将代表一个数独单元,它是“候选人”。但是,如果我事先知道这些值,这似乎会有所帮助。
猜你喜欢
  • 2021-04-27
  • 2013-12-02
  • 2016-08-13
  • 2019-11-17
  • 2014-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多