如何检查一行中的3个节点是否相同C++?

How to check if 3 nodes in a row are identical C++?

本文关键字:3个 是否 节点 C++ 一行 何检查 检查      更新时间:2023-10-16

我有一个链接列表,我想检查一行中是否有 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";
}

现场演示

相关文章: