|
|
|
@ -6,11 +6,15 @@ package ru.molokoin;
@@ -6,11 +6,15 @@ package ru.molokoin;
|
|
|
|
|
* это структура, хранящая данные в виде цепочки, каждый узел которой хранит очередное значение списка и ссылку на следующий узел. |
|
|
|
|
* Ссылка на следующий узел последнего элемента списка равна null. |
|
|
|
|
* |
|
|
|
|
* TODO обработать исключения: |
|
|
|
|
* - |
|
|
|
|
* |
|
|
|
|
*/ |
|
|
|
|
public class Pearl { |
|
|
|
|
private Object gem; |
|
|
|
|
private Pearl next; |
|
|
|
|
|
|
|
|
|
//использую для переписи данных массива
|
|
|
|
|
public Pearl(){ |
|
|
|
|
this(null, null); |
|
|
|
|
} |
|
|
|
@ -21,6 +25,38 @@ public class Pearl {
@@ -21,6 +25,38 @@ public class Pearl {
|
|
|
|
|
setGem(gem); |
|
|
|
|
setNext(next); |
|
|
|
|
} |
|
|
|
|
/** |
|
|
|
|
* Удаляет с ожерелья последнюю жемчужину, |
|
|
|
|
* возвращает эту жемчужину |
|
|
|
|
* @return |
|
|
|
|
* TODO в списке может быть только один элемент |
|
|
|
|
*/ |
|
|
|
|
public Pearl executeLast(){ |
|
|
|
|
//получил последнюю жемчужину, можно удалять ее с ожерелья
|
|
|
|
|
Pearl last = getLast();//можно данные получать в том же переборе, где и удаление происходит (исключим один перебор)
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* удаление последней жемчужины. |
|
|
|
|
* в предпоследней жемчужине next приравниваем null |
|
|
|
|
*/ |
|
|
|
|
int i = 0; |
|
|
|
|
Pearl current = this; |
|
|
|
|
while (i < lenght()-1){ |
|
|
|
|
current = current.next; |
|
|
|
|
i++; |
|
|
|
|
} |
|
|
|
|
current.setNext(null); |
|
|
|
|
return last; |
|
|
|
|
} |
|
|
|
|
public int lenght(){ |
|
|
|
|
int lenght = 0; |
|
|
|
|
Pearl current = this; |
|
|
|
|
while(current.next != null){ |
|
|
|
|
current = current.getNext(); |
|
|
|
|
lenght++; |
|
|
|
|
} |
|
|
|
|
return lenght; |
|
|
|
|
} |
|
|
|
|
/** |
|
|
|
|
* Рекурсивно печатает данные, пока не упрется в next = null |
|
|
|
|
*/ |
|
|
|
@ -31,10 +67,11 @@ public class Pearl {
@@ -31,10 +67,11 @@ public class Pearl {
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
/** |
|
|
|
|
* Добавление элемента в конец списка |
|
|
|
|
* перебирает жемчужины до конца, последней присваивет в next новую жемчужину |
|
|
|
|
* @param gem |
|
|
|
|
*/ |
|
|
|
|
public void add(Object gem){ |
|
|
|
|
public void addLast(Object gem){ |
|
|
|
|
if(this.gem == null){setGem(gem);} |
|
|
|
|
else { |
|
|
|
|
Pearl pearl = new Pearl(gem); |
|
|
|
@ -45,7 +82,28 @@ public class Pearl {
@@ -45,7 +82,28 @@ public class Pearl {
|
|
|
|
|
current.next = pearl; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Добавление элемента в начало списка. |
|
|
|
|
* |
|
|
|
|
* @param gem |
|
|
|
|
*/ |
|
|
|
|
public void addFirst(Object gem){ |
|
|
|
|
if(this.gem == null){setGem(gem);} |
|
|
|
|
else { |
|
|
|
|
//создаем новую жемчужину с параметрами первой
|
|
|
|
|
Pearl pearl = new Pearl(getGem()); |
|
|
|
|
pearl.setNext(getNext()); |
|
|
|
|
//пишем в текущую-первую жемчужину новые данные
|
|
|
|
|
setGem(gem); |
|
|
|
|
//и устанавливаем ссылку на новую жемчужину
|
|
|
|
|
setNext(pearl); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
/** |
|
|
|
|
* возвращает последнюю жемчужину-Pearl |
|
|
|
|
* getLast().getGem()//вернет данные последней жемчужины
|
|
|
|
|
* @return |
|
|
|
|
*/ |
|
|
|
|
public Pearl getLast(){ |
|
|
|
|
Pearl current = this; |
|
|
|
|
while (current.next != null){ |
|
|
|
@ -60,6 +118,7 @@ public class Pearl {
@@ -60,6 +118,7 @@ public class Pearl {
|
|
|
|
|
this.gem = gem; |
|
|
|
|
} |
|
|
|
|
/** |
|
|
|
|
* Возвращает данные-gem жемчужины |
|
|
|
|
* @return the gem |
|
|
|
|
*/ |
|
|
|
|
public Object getGem() { |
|
|
|
|