Добавление нового элемента перед заданным элементом в списке

 class ListElement {

     ListElement next;   // указатель на следующий элемент
    int data;          // данные

 }
 class List {
     private ListElement front; // указатель на первый элемент
     private ListElement rear;  // указатель последний элемент

     void addFront(int data) {
         ListElement a = new ListElement(); //создаём новый элемент
         a.data = data;          //инициализируем данные.
         // указатель на следующий элемент автоматически инициализируется как null
         if (front == null) {    //если список пуст
             front = a;
             rear = a;     //то указываем ссылки начала и конца на новый элемент
         } else {
             a.next = front; //иначе новый элемент теперь ссылается на "бывший" первый
             front = a;      //а указатель на первый элемент теперь ссылается на new элемент
         }

     }

      void addBack(int data) {
         ListElement a = new ListElement();
         a.data = data;
         if (rear == null) {    //если список пуст
                                      //то указываем ссылки начала и конца на новый элемент
             front = a;            //т.е. список теперь состоит из одного элемента
             rear = a;
         } else {                  //иначе "старый" последний элемент теперь ссылается на новый
             rear.next = a;
             rear = a;           //а в указатель на последний элемент записываем адрес нового элемента
         }
     }
     void addAfter(int data, int index) {

         int position = 0;
         ListElement current = front;
         while (current != rear && current.next != null && position != index) {
             current = current.next;
             position++;
         }

         if (index != position) {
             throw new IndexOutOfBoundsException("index: " + index);
         }

         ListElement element = new ListElement();
         element.data = data;

         if (current == null) {
             front = element;
             rear = element;
         } else if (current == rear){
             rear.next = element;
             rear = rear.next;
         } else {
             element.next = current.next;
             current.next = element;
         }
     }

     



     void showElem() {
         ListElement t = front;       //получаем ссылку на первый элемент
         while (t != null) {          //пока элемент существуе
             System.out.print(t.data + " ");      //печатаем его данные
             t = t.next;                     //и переключаемся на следующий
         }
     }

     void delElem(int data) {
         if (front == null)
             return;
         if (front == rear) {      //если список состоит из одного элемента
             front = null;      //очищаем указатели начала и конца и exit
             rear = null;
             return;
         }
         if (front.data == data) {   //если первый элемент - тот, что нам нужен
             front = front.next;     //переключаем указатель начала на второй элемент
             return;
         }
         ListElement t = front;         //иначе начинаем искать
         while (t.next != null) {          //пока следующий элемент существует
             if (t.next.data == data) {    //проверяем следующий элемент
                 if (rear == t.next) {     //если он последний
                     rear = t;                //то переключаем указатель на последний элемент на текущий
                 }
                 t.next = t.next.next;   //найденный элемент выкидываем и выход
                 return;
             }
             t = t.next;                 //иначе ищем дальше
         }
     }
 }



как реализовать новый класс для добавления нового элемента перед заданным элементом?(как в addAfter , только перед элементом)


Ответы (0 шт):