如何使用链接列表节点修改另一个链接列表

时间:2012-10-24 06:29:36

标签: c++ stl linked-list implementation

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

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。我做了一些研究似乎我不能像数组一样访问列表的节点。是否有容器允许我轻松地添加和删除节点并与其他容器进行比较和修改?我认为集合可能是另一种选择,但似乎我无法访问集合中的值。任何帮助或证据都会很棒。提前谢谢。

EDIT :::

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

例如     listlist1;     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.

我希望稍微澄清一下我的问题。这是我用来解决简单的sudokus的方式,我稍后会实施暴力技术。

3 个答案:

答案 0 :(得分:1)

我不知道你用另一个修改容器的想法可能意味着参考。将它用作参考变量:

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

答案 1 :(得分:0)

这是一种方式,毫无疑问还有其他方式。它确实取决于你的环境。例如,如果您的列表已经排序,那么有更好的方法。

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

答案 2 :(得分:0)

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

使用辅助功能:

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

并在您的代码中使用它:

list1.remove_if(&IsInList2);