Как написать метод перемешивания своего LinkedList^a на Java
В методе я перемешиваю лист, присваивая узлы исходного списка в случайном порядке временному листу. Я бы хотел отдельно добавлять элементы в начало, конец и середину списка. Я не понимаю, как реализовать добавление в хвост списка, чтобы позже список получался целым, а не разделённым, где одни элементы можно получить только, идя с начала, а другие с конца.
public void shuffle() {
MyLinkedListNote<T> headTmp = null;
MyLinkedListNote<T> tailTmp = null;
MyLinkedListNote<T> curr = head;
Random random = new Random();
int resLength = 0;
while (curr != null) {
MyLinkedListNote<T> tmp = curr.next;
int randomIn = random.nextInt(resLength + 1);
if (randomIn == 0) {
curr.next = headTmp;
headTmp = curr;
resLength++;
} else if (randomIn == resLength) {
curr.next = tailTmp;
tailTmp = curr;
resLength++;
} else {
MyLinkedListNote<T> currTmp = headTmp;
int resListIterator = 0;
while (resListIterator < randomIn - 1) {
resListIterator++;
currTmp = currTmp.next;
}
curr.next = currTmp.next;
currTmp.next = curr;
resLength++;
}
curr = tmp;
}
head = headTmp;
tail = tailTmp;
}
Источник: Stack Overflow на русском