在c++中同时遍历多个链表
Iterate through multiple linked lists at the same time in c++
我正在执行一项任务,该任务需要从包含多个字符链表的链表中计算度量(每行都是一个链表,如图所示)。因此,我需要遍历第二行中包含空格的每个节点,以检查有多少空格被其他四个空格(顶部、底部、左侧、右侧)包围。例如,参考下图,第三行中的第二个空格被四个空格包围,因此count++。("H"只是简单地表示非空格字符,很抱歉我没有足够的声誉来发布真实的图片)。
我被允许使用STL列表库。我试图使用三个迭代器同时遍历三行。然而,由于每一行的长度不同,代码变得非常混乱,甚至无法正常工作。我已经思考了两天的解决方案,但由于我只练习了两个月的C++,所以我能想到的非常有限。所以我想知道是否有人能给我一个提示或更聪明的解决方案。
谢谢你事先的建议。
space | space |--H-|--H-||--H-|NULL|NULL
---H-|--H---|空格|空格|---H-|--H-|NULL
--H-|space|space|--H-|space |NULL
space|--H-|space|space|--H-|NULL|NULL
如果您可以使用任何标准库容器,那么我建议使用向量的向量。通过这种方式,您可以通过索引进行循环,并在相邻向量上使用该索引。如果你可以在算法之前填充向量,那么你可以使所有向量都具有相同的大小,并首先用所有非空格(零?)填充它们,然后用链表的内容填充它们。
对于固定大小的向量,它基本上应该是两个嵌套循环(从第二个到最后一个,但只有一个条目),只检查空间和相邻空间。
未测试:
bool isSpace(char c) { return c == ' '; } // std::isspace tests for all whitespaces
int countSurroundedSpaces(const std::vector<std::vector<char> >& vecs)
{
int count = 0;
for (int v = 1; v < vecs.size()-1; ++v)
{
for (int i = 1; i < vecs[v].size()-1; ++i)
{
if (isSpace(vecs[v][i])
&& isSpace(vecs[v-1][i]) && isSpace(vecs[v][i-1])
&& isSpace(vecs[v][i+1]) && isSpace(vecs[v+1][i]))
{
++count;
}
}
}
return count;
}
相关文章:
- 遍历链表时的无限循环
- C++声明双链表,使用两个 for 循环双向遍历列表并打印
- 关于链表遍历和调试的困惑
- 链表遍历跳过值
- 无法遍历链表
- 自定义链表const_iterator无法遍历列表的非const实例
- 在 C++ 中遍历链表比在具有类似内存访问的 Go 中慢
- C++ 遍历链表
- 遍历链表时出现分段错误
- 如何在 c++ 中多次遍历链表
- C++链表遍历和修改
- 如果我们使用链表数组来实现哈希表,则可以以不需要遍历的方式实现"add"。这是真的还是假的?
- 链表的循环遍历
- 多线程链表遍历
- 如何在链表中遍历后得到列表的头
- 遍历内部带有结构的链表
- C++ 使用 For 循环的链表遍历和打印
- 遍历链表: while(ptr!=NULL) vs while(ptr->next!=NULL)?
- C++链表遍历
- 如何在C++中调用递归链表遍历函数