如何检查一行中的3个节点是否相同C++?
How to check if 3 nodes in a row are identical C++?
我有一个链接列表,我想检查一行中是否有 3 个节点具有相同的数据/值,如果是这样,我想将它们从列表中删除。
例如 1, 2, 3, 4, 4, 4, 4, 7, 5; 这里从索引 3-5 具有相同的值,那么新列表将是新列表:1, 2, 3, 7, 5
这是我的代码,我只是对如何跟踪前 2 个值感到困惑,以便我可以使用当前指针指向的节点来露营它们。
假设我的其余代码工作正常
void Remove_ThreeDuplicates()
{
Node *current= head;
Node *prev = current;
Node *prev_prev = prev;
//keep track of identical found
int i = 0;
while(current->next != NULL)
{
prev_prev =head_ptr;
prev = prev_prev->Next;
current = prev->Next;
//checks if nodes are identical
if(prev_prev->data == prev->data && prev->data == current->data)
{
//remove the 3 identical nodes
prev_prev = current->next;
i++;
}
}
cout<<i<<" three pairs of identical node foundn"l;
}
例如,我建议在列表中向前看而不是向后看(我相信这可以优化,我会把它留给你一个练习(:
void Remove_ThreeDuplicates()
{
Node *current = head;
Node **prev = &head;
int found = 0;
while (current)
{
Node *next1 = current->next;
if (!next1) break;
Node *next2 = next1->next;
if (!next2) break;
if (next1->data == current->data && next2->data == current->data)
{
Node *next3 = next2->next;
*prev = next3;
delete current;
delete next1;
delete next2;
current = next3;
++found;
}
else
{
prev = &(current->next);
current = next1;
}
}
cout << found << " triplet of identical nodes foundn";
}
现场演示
相关文章:
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 是否可以使用winusb同时与多个相同的usb设备进行通信
- 如何检查两个 std::向量在小于 O(n) 的时间复杂度内是否相等
- 如果中的多个语句是否与多个 if 相同?
- 在C++行尾写一个分号或多个分号是否会改变任何内容
- 如何知道n!是否可以表示为三个连续数字的乘法?
- 表达式 SFINAE:如何根据类型是否包含具有一个或多个参数的函数来选择模板版本
- 是否可以在 OpenGL 中的同一调用中呈现两个具有不同索引起点的不同缓冲区?
- 检查两个节点在子节点上是否具有相同状态的更优雅的方法
- 如何巧妙地编写两个函数——一个用于检查是否存在解决方案,另一个用于获取所有解决方案
- 我们是否需要为 C++ 中的多个函数初始化多个模板?
- 使用XOR查找O(n)-解决方案中的两个字符串是否为变位符
- 给定一个大小为 N 的数组 S,检查是否可以将序列拆分为两个序列
- 具有相同特征的两个对象是否只在内存中存储一次?无论定义它们的函数是什么,都是不同的
- 如何更好地检查两个 char 变量是否在一组值中?
- 模板变量是否允许在多个翻译单元中并有效合并?
- C++:在多个线程中访问同一数组/向量的不同单元格是否会产生数据竞赛?
- 如果在 2 个线程中使用,是否值得将size_t声明为 std::atomic?
- 是否确保 2 个连续的 std::chrono::steady_clock::now() 不相等?
- 是否可以在文本文件中找到最长单词的长度,并在同一个文本文件中读取,只需 1 个 while 循环?