Раздавить узлы связанного списка - PullRequest
0 голосов
/ 17 июня 2019

При наличии связанного списка, как мне раздавить все более двух узлов, которые являются непрерывными и имеют одинаковое значение.например, 1-> 3-> 3-> 3-> 5-> 4-> 4-> 4-> 5-> 5-> 2-> 5 step1 раздавить 3 1-> 5-> 4-> 4->4-> 5-> 5-> 2-> 5 step2 crush 4 1-> 5-> 5-> 5-> 2-> 5 step3 crush 5 return 1-> 2-> 5 Я пробовал код ниже, но его возвращение1-> 5 -> -> 5-> 2-> 5

    public void Crush()
    {
        Node prev = null, current = head;

        if (head == null)
        {
            return;
        }
        prev = current;
        while (current.next != null)
        {



            int k = 0;
            while (current != null && current.next != null && current.data == current.next.data)
            {
                k++;
                current = current.next;
            }

            if (k < 2)
            {

               // prev.next = current;
                current = current.next;


            }
            else
            {
                prev.next = current.next;
                current = current.next;


            }

        }
        head = prev;
    }

1 Ответ

0 голосов
/ 19 июня 2019
1->3->3->3->5->4->4->4->5->5->2->5
               ^

1->5->5->5->2->5
      ^          

Когда вы удаляете прогон 4с, он создает новый прогон 5с.Тем не менее, первые 5 уже были пропущены, поэтому учитываются только 2 5 *.

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

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