2012-11-16 14 views
1

Я хочу разработать LinkedList другого LinkedList, до сих пор у меня есть этот метод в классе MyLinkedList:Добавить LinkedList в LinkedList, JAVA

public void addList(int index, E e){ 
     if(index == 0){ 
      addFirst(e); 
     } else if (index >= size){ 
      addLast(e); 
     } 
     else{ 
      Node<E> current = head; 
      for(int i = 1; i < index; i++){ 
       current = current.next; 
      } 
      Node<E> temp = current.next; 
      current.next = new Node<E>(e); 
      (current.next).next = temp; 
      size++; 
     } 
    } 

Я застрял на самом методе, моя основная программа имеет два LinkedLists, что выглядит следующим образом:

MyLinkedList<String> strings1 = new MyLinkedList<String>(); 
     strings1.add("java"); 
     strings1.add("language"); 
     strings1.add("cooler"); 
     strings1.add("noob"); 
     System.out.println(list1); 

     MyLinkedList<String> strings2 = new MyLinkedList<String>(); 
     strings2.add("artistic"); 
     strings2.add("cereal"); 
     strings2.add("bowl"); 
     System.out.println(list2); 

Тогда я хочу добавить LinkedList из строке2 в LinkedList строки1. Как мне это сделать? Я думал использовать

strings1.addList(2, strings2); 

, но он не работает, он не позволит мне добавить Strings2 к strings1 Я думаю, результат будет выглядеть следующим образом, если я это сделал: Java, язык, художественные, хлопья, чаша, кулер, noob или что-то подобное, пожалуйста, помогите!

+1

Вы хотите добавить * содержимое * одного списка в другой? Или вы хотите добавить сам фактический список в новый связанный список? –

+0

Кроме того, что происходит, когда вы говорите «это не сработало»? Откуда вы знаете, что «это не позволит вам добавить строки2 в строку1»? Что происходит, когда вы пытаетесь? –

+0

Зачем вам нужен другой класс? Вы можете использовать оригинальный класс. Если вам нужны пользовательские индексы, используйте массивы. –

ответ

0

Используйте метод addAll(int index, Collection c), чтобы добавить два списка вместе.

strings1.addAll(startIndex, strings2); 

Вы также должны реализовать интерфейс List для вашего класса MyLinkedList .. Это тоже не совсем понятно, что ваш класс MyLinkedList выглядит?

+0

Вопрос о внедрении метода в пользовательский класс связанных списков. –

+0

Ну, вы не можете добавить две вещи к одному и тому же индексу, поэтому я не уверен, чего вы пытаетесь достичь? –

+0

Не список # addAll (int, java.util.Collection), чего вы хотите достичь? Я не понимаю, почему вы переписываете его, если вы можете реализовать интерфейс List. –

3

У вас есть метод в классе, который принимает один узел, просто называют это столько раз, сколько вам нужно для второго списка:

например

void addAll(int index, MyList<> second_list) 
{ 
    for(Object o : second_list) 
    { 
    addList(index, o); 
    ++index; 
    } 
} 

выше диапазона на основе цикл не может работать, если ваш класс не реализованы соответствующие интерфейсы, я лениться - использовать обычную итерацию, который поддерживает ваш класс ...

+0

+1 Для ответа на вопрос (непонятный - IMO). –

+0

+1 К сожалению, извините, дайте + 1, ваше решение на самом деле правильное. моя вина. – Renato

0

Самый простой из возможных способов. ...

public void insertList(int index, List<String> list) { 
    Collections.reverse(list); 
    for (String str : list) { 
     add(index, str); 
    } 
} 
+0

Конечно, этот фрагмент кода должен войти в подкласс класса LinkedList. – Renato