如何检查单向链表的每个 3 个元素,然后删除其中一些元素?



所以基本上我的大学有这个作业,要求制作一个排序的单向链表,然后在上面做一些方法。我遇到的问题是:"创建 delete(( 函数,用于检查每个三元组元素的平均值,如果它低于整数"K"(这是该函数的参数(,则删除三元组的第一个元素或删除三元组的第二个和最后一个元素如果它更高。

我已经制作了一个删除链表单个元素的函数/方法。

void LinkedList::deleteElement(int a)
{
Node *temp = head;
Node *previousTemp = head;
while(temp != nullptr)
{
if(temp->value == a)
{
break;
}
else
{
previousTemp = temp;
temp = temp->next;
}
}
if(temp == nullptr)
{
cout << "Can't delete. Element not found." << endl;
}
else
{
cout << "nDeleting element: " << temp->value << endl;
previousTemp->next = temp->next;
delete temp;
}
howMany--;
}
void Sznur::deleteTriple()
{
Node *first = head;
Node *second = first->next;
Node *third = second->next;
}

该任务编写起来很难理解,但例如:

int K=3
linkedList: 7,6,6,3,3,3,2,1,1,1,1

运行函数后:

linkedList: 7,3,1,1,1,1

(7+6+6(/3> K -> 删除 6 和 6

(3+3+3(/3> K -> 德尔特斯 第二个 3 和最后一个 3

(2+1+1(/3

尝试这样的事情。

void tripleFunc(Node* head, int K)
{
Node* nodePtr = head; // nodePtr always points at the start of a new triple
while (true)
{
Node* first = nullptr;
Node* second = nullptr;
Node* third = nullptr;
first = nodePtr; // When taking the three elements out, remember to always check for a null pointer BEFORE accessing the element
if (first)
second = first->next;
if (second)
third = second->next;
if (third)
nodePtr = third->next; // Keep the nodePtr pointing at the start of the next triple
else
return; // Only happens if one or more of the previous ifs failed, which means that we don't have enough elements left for a full triple
if (calculateAverage(first, second, third) < K) // Make this function
{
deleteElement(first->value);
}
else
{
deleteElement(second->value);
deleteElement(third->value);
}
}
}

不过我还没有测试过它,所以任何可能的错误都留给读者作为练习来查找和整理。 :)

相关内容

  • 没有找到相关文章

最新更新