在c++中同时遍历多个链表

Iterate through multiple linked lists at the same time in c++

本文关键字:链表 遍历 c++      更新时间:2023-10-16

我正在执行一项任务,该任务需要从包含多个字符链表的链表中计算度量(每行都是一个链表,如图所示)。因此,我需要遍历第二行中包含空格的每个节点,以检查有多少空格被其他四个空格(顶部、底部、左侧、右侧)包围。例如,参考下图,第三行中的第二个空格被四个空格包围,因此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;
}