Добавление элемента на заданную позицию в односвязном списке (Java)

#java #linked-list #nodes

#java #связанный список #узлы

Вопрос:

Если кто-нибудь может помочь мне разобраться с этой проблемой, я в буквальном смысле отдам вам своего первенца. Приношу извинения за любые проблемы с форматированием и т.д., Поскольку это моя первая публикация (пожалуйста, будьте полегче со мной !!).

В настоящее время я пытаюсь найти метод add для общего класса связанного списка. Вот его описание: Вставляет указанный объект в указанную позицию в этом списке. Сдвигает объект, находящийся в данный момент в этой позиции (если таковой имеется), и любые последующие объекты вправо (т. Е. добавляет единицу к их индексам).

Вот код, который у меня в настоящее время есть для метода, исключая обработку исключений.

 next = head;
size  ;
for (int i = 0; i < index; i  ) {
     next = next.getNext();
} // for                                                                                                                                                                                    
GenListNode<T> prev = next;
GenListNode<T> current = next;
for (int count = 0; count < size - 1; count  ) {
     prev = next;
     current = next;
     for (int i = count; i < size - 3; i  ) {
          prev = prev.getNext();
     } // for                                                                                                                                                                                
     for (int j = count; j < size - 2; j  ) {
         if (current.getNext() == null) {
             current.setNext(new GenListNode<T>());
         } // if                                                                                                                                                                             
         current = current.getNext();
      } // for                                                                                                                                                                                
current.setData(prev.getData());
} // for
next.setData(obj);
  

Вот код моего класса GenListNode.

 private GenListNode<T> next;
private T data; 

    public GenListNode(T data, GenListNode<T> next) {
        this.next = next;
        this.data = data;
    } // GenListNode                                                                                                                                                                                

    public GenListNode(T data) {
        this.data = data;
    } // GenListNode                                                                                                                                                                                

    public GenListNode() {
    } // GenListNode                                                                                                                                                                                

    public void setData(T data) {
        this.data = data;
    } // setData                                                                                                                                                                                    

    public void setNext(GenListNode<T> n) {
         this.next = n;
    } // setNext                                                                                                                                                                                    

    public T getData() {
         return data;
    } // getData                                                                                                                                                                                    

    public GenListNode<T> getNext() {
        return next;
    } // getNext                                                                                                                                                                                    
  

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

Комментарии:

1. Я не уверен, что там делает ваш метод, но обычно, чтобы вставить что-то в связанный список, вы просто перебираете next (), пока не попадете в нужное место, затем создаете новый узел, устанавливаете new-> next = previous-> next, а затем previous-> next = new.

2. @azurefrog И когда вы говорите «предыдущий», вы имеете в виду узел в месте непосредственно перед правильным местом, правильно?