JAVA удаляет несколько последовательных элементов из кругового связанного списка - PullRequest
0 голосов
/ 04 октября 2018

Я довольно далеко продвинулся в своем проекте, связанном с однотипными круговыми связными списками, и все еще испытываю проблемы с одним пунктом.Моя проблема связана с тем, что я не могу / не знаю, как вызвать узел перед узлом, содержащим первый из четырех последовательных цветов, и направить его в начало.

Подсказка для игры Marbles: Поместите случайные шарики по кругу, и если появятся четыре одинаковых цвета, удалите их и добавьте четыре раза к общей оценке цвета.

Я был бы очень признателен, если бы кто-то мог мне помочьпонять, как решить эту проблему ..

Вот код, над которым я работаю:

public void deleteQuadruples()
{
    //if the list has 4 nodes, delete all and make a new head
    if (size == 4 && (start.getaMarble().getNumber() == start.getNextLink().getaMarble().getNumber()
            && start.getNextLink().getaMarble().getNumber() == start.getNextLink().getNextLink().getaMarble().getNumber()
            && start.getNextLink().getNextLink().getaMarble().getNumber() == start.getNextLink().getNextLink().getNextLink().getaMarble().getNumber()))
    {
        sum = 4*start.getaMarble().getNumber();

        start = new Link(null, null);

        addFirstMarble();
    }

    //else go thru the list and find whether or not there are four consecutive marbles of the same color/number and if so take them out
    else 
    {
        Link tmp = start;

        if (tmp == null)
        {
            return;
        }

        do
        {
            /*int colorNumber = tmp.getaMarble().getNumber();
              int counter = 1;
              tmp = tmp.getNextLink();
              if(colorNumber == tmp.getaMarble().getNumber())
              {
                  counter++;
              }

              if(counter == 4)
              {
                  score += 4*tmp.getaMarble().getNumber();
                  counter = 1;
                  //delete the 4 consecutive elements
              }

              if(tmp.getNextLink() == start && counter == 3 && start.getaMarble().getColor() == tmp.getaMarble().getColor())
              {
                  score += 4*tmp.getaMarble().getNumber();
                  start = start.getNextLink();
                  //delete the 4 consecutive elements
              }*/

            for(Link cursor = start; cursor != end; cursor = cursor.getNextLink)
            {
                Link temp;

                counter = 1;
                if(cursor.getaMarble().getNumber() == cursor.getNextLink().getaMarble().getNumber())
                {
                    counter++;
                }

                if(cursor.getaMarble().getNextLink().getNumber() != cursor.getNextLink().getNextLink().getaMarble().getNumber())
                {
                    counter = 1;
                }

                if (counter == 4)
                {
                    //deletes the four consecutive nodes with same color 
                    //something.getNextLink() = start;  
                    score += 4* cursor.getaMarble.getNumber();
                }
            }
        } 

        while (tmp != start);
    }
}

1 Ответ

0 голосов
/ 04 октября 2018

Я внес некоторые изменения в ваш код (он может не скомпилироваться, но даст представление)

public void deleteQuadruples()
{
  if (start == null || size == 3)
          return;

  //if the list has 4 nodes, delete all and make a new head
  if (size == 4 && (start.getaMarble().getNumber() == start.getNextLink().getaMarble().getNumber()
      && start.getNextLink().getaMarble().getNumber() == start.getNextLink().getNextLink().getaMarble().getNumber()
      && start.getNextLink().getNextLink().getaMarble().getNumber() == start.getNextLink().getNextLink().getNextLink().getaMarble().getNumber()))
  {
      sum = 4*start.getaMarble().getNumber();
      start = new Link(null, null);
      addFirstMarble();
  }

  //else go thru the list and find whether or not there are four consecutive marbles of the same color/number and if so take them out
  else 
  {
      Node end = start;

      while (end.getNextLink().getaMarble().getNumber() != start.getNextLink().getaMarble().getNumber())
      { end = end.getNextLink(); }

      // no data
      if(end.getNextLink().getaMarble().getNumber() == start.getaMarble().getNumber())
        return;

      // we have data
      else {
        sum = 4*start.getaMarble().getNumber();
     // loop four times
     // set the end.getNextLink() with start.getNextLink()
     }  
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...