Взял пример с данного ресурса,
но не смог найти как вставить/удалить из середины.
Как это сделать? (нужно именно руками а не linklist
)
class ListElement {
ListElement next; // указатель на следующий элемент
int data; // данные
}
class List {
private ListElement head; // указатель на первый элемент
private ListElement tail; // указатель последний элемент
void addFront(int data) //добавить спереди
{
ListElement a = new ListElement(); //создаём новый элемент
a.data = data; //инициализируем данные.
// указатель на следующий элемент автоматически инициализируется как null
if(head == null) //если список пуст
{ //то указываем ссылки начала и конца на новый элемент
head = a; //т.е. список теперь состоит из одного элемента
tail = a;
}
else {
a.next = head; //иначе новый элемент теперь ссылается на "бывший" первый
head = a; //а указатель на первый элемент теперь ссылается на новый элемент
}
}
void addBack(int data) { //добавление в конец списка
ListElement a = new ListElement(); //создаём новый элемент
a.data = data;
if (tail == null) //если список пуст
{ //то указываем ссылки начала и конца на новый элемент
head = a; //т.е. список теперь состоит из одного элемента
tail = a;
} else {
tail.next = a; //иначе "старый" последний элемент теперь ссылается на новый
tail = a; //а в указатель на последний элемент записываем адрес нового элемента
}
}
void printList() //печать списка
{
ListElement t = head; //получаем ссылку на первый элемент
while (t != null) //пока элемент существуе
{
System.out.print(t.data + " "); //печатаем его данные
t = t.next; //и переключаемся на следующий
}
}
void delEl(int data) //удаление элемента
{
if(head == null) //если список пуст -
return; //ничего не делаем
if (head == tail) { //если список состоит из одного элемента
head = null; //очищаем указатели начала и конца
tail = null;
return; //и выходим
}
if (head.data == data) { //если первый элемент - тот, что нам нужен
head = head.next; //переключаем указатель начала на второй элемент
return; //и выходим
}
ListElement t = head; //иначе начинаем искать
while (t.next != null) { //пока следующий элемент существует
if (t.next.data == data) { //проверяем следующий элемент
if(tail == t.next) //если он последний
{
tail = t; //то переключаем указатель на последний элемент на текущий
}
t.next = t.next.next; //найденный элемент выкидываем
return; //и выходим
}
t = t.next; //иначе ищем дальше
}
}
}
public class Main {
public static void main(String[] args) {
List ml = new List();
ml.addBack(1);
ml.addBack(2);
ml.addBack(3);
ml.addFront(6);
ml.printList();
System.out.println();
ml.delEl(6);
ml.delEl(5);
ml.delEl(12);
ml.delEl(2);
ml.printList();
System.out.println();
}
}
Функция, возвращающая длину списка:
int leng() {
int res = 0;
ListElement t = head;
while (t != null)
{
t = t.next;
res++;
}
return res++;
}
Функция вставляющая элемент в определённое место списка
void addInPlace(int data, int place) {
ListElement a = new ListElement();
a.data = data;
if (place >= len())
{
System.out.print("Индекс вставки превышает длину списка");
} else {
int ind;
ListElement t = head;
while (ind < place - 1){
t = t.next;
ind++;
}
a.next = t.next;
t.next = a;
}
}
Таким образом теперь вы можете вставить элемент в любое место списка, хоть в середину, хоть в четверть...
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
В material design описано все красиво и работает по картинкам все красиво, только на практике немного иначе работаетTextInputEditText находится внизу, а не по центру...
Решал задачу на codeforcesРешил двумя способами, один работает, второй нет
Сам вопрос: к примеру если ввести число 1276 То должно вывести число 1, 2, 7, 6, и вводное число должно быть любых размеров