2015-12-28 2 views
1

Попытка реализовать метод, который удаляет узел по указанному индексу и возвращает его элемент данных. Принимая начинающий онлайн-курс, и я не уверен, как вернуть тип данных E. Извините, если мой код ужасен.Doubly Linked List Удалить метод

public class MyLinkedList<E> extends AbstractList<E> { 
    LLNode<E> head; 
    LLNode<E> tail; 
    int size; 

    /** Create a new empty LinkedList */ 
    public MyLinkedList() { 
     size = 0; 
     head = new LLNode<E>(null); 
     tail = new LLNode<E>(null); 
     head.next = tail; 
     tail.prev = head; 

    public E remove(int index) 
    { 
     int ithNode = 1; //tracks node path location 
     LLNode<E> newNode = new LLNode<E>(null); 

     if (index < 0 || index > size()) { 
      throw new IndexOutOfBoundsException(); 
     } 

     if (index == 1) { 
      newNode = head.next; 
      head.next = null; 
      head.prev = null; 
     } else { 
      while (ithNode != index) { 
       head = head.next; 
       ithNode++; 
      } 
      if (head.next == null) { 
       head.prev.next = null; 
       head.prev = null; 
      } else { 
       head.prev.next = head.next; 
       head.next.prev = head.prev; 
      } 
     } 
    } 

} 

class LLNode<E> 
{ 
    LLNode<E> prev; 
    LLNode<E> next; 
    E data; 

//Not sure if I should create another constructor here 
    public LLNode(E e) 
    { 
     this.data = e; 
     this.prev = null; 
     this.next = null; 
    } 
} 
+1

если вы удалите что-то, почему бы не вернуть узел, который был удален, или просто ничего не – OPK

+0

возвращающегося 'если (индекс <0 || индекс> размер())' должен быть 'если (индекс < 0 || index> = size()) 'или предпочтительно' if (! (Index> = 0 && index WalterM

+0

Думаю, я не понимаю вашего задания. Зачем изобретать свой собственный класс? java.util.LinkedList является двунаправленным и реализует метод remove(), который возвращает элемент. https://docs.oracle.com/javase/7/docs/api/java/util/LinkedList.html#remove(int) –

ответ

0

Помните, что E является заполнителем для любого типа данных, который попадет в LinkedList. Вы вернете данные, как и любой другой элемент. Мое предложение - когда вы добираетесь до элемента для удаления, сохраняете данные, которые есть, устанавливаете новые следующие и предыдущие ссылки, а затем возвращаете данные. Пример:

E returnData = head.data; 
//set references 
return returnData; 
Смежные вопросы