Как проверить, идентичны ли 3 узла подряд C ++? - PullRequest
0 голосов
/ 19 октября 2019

У меня есть связанный список, я хотел проверить, есть ли в строке 3 узла с одинаковыми данными / значением, и если да, я хочу удалить их из списка.

ex. 1, 2, 3, 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 found\n"l;

}

1 Ответ

3 голосов
/ 19 октября 2019

Я бы посоветовал смотреть вперед в списке, а не оглядываться назад, например (я уверен, что это можно оптимизировать, я оставлю это как упражнение для вас):

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 found\n";
}

Live демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...