Я довольно далеко продвинулся в своем проекте, связанном с однотипными круговыми связными списками, и все еще испытываю проблемы с одним пунктом.Моя проблема связана с тем, что я не могу / не знаю, как вызвать узел перед узлом, содержащим первый из четырех последовательных цветов, и направить его в начало.
Подсказка для игры 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);
}
}