2014-05-02 4 views
0

Я пытаюсь создать метод, который добавляет int в конец существующего связанного списка.Прокрутка связанного списка

Q: Написать метод, который принимает главу списка, который не является сторожевым узлом, и ИНТ n. Метод должен перемещать первые n узлов в конец списка, сохраняя их в том же порядке. Например, если у вас есть список [1, 3, 5, 7, 9] и n = 3, ваш метод должен вернуть список: [7, 9, 1, 3, 5] (вернуть голову измененный список).

Вот что у меня есть, речь идет о методе addLast:

public class ListItem{ 
    public int value; 
    public ListItem next; 

    public ListItem(int value, ListItem next){ 
     this.value = value; 
     this.next = next; 
    } 

    public void addFirst(int x){ 
     head = new ListItem(x, head); 
     size++ 
    } 

    public void addLast(int x){ 
     if(head == null){ 
      addFirst(x); 
     } 
     else{ 
      ListItem p; 
      for(p = head; p != null; p = p.next){ 
       p.next = new ListItem(x, null); 
       size++; 
      } 
     }   
} 

Я немного запутался, как метод перебирает список. В цикле for он начинается в начале и прокручивается до тех пор, пока не будет p.next. Но метод внутри выглядит так, что он заменяет каждый p.next новым элементом списка, а не прокручивается до конца. Какая часть кода объясняет, как он пропускает, не добавляя новый элемент в каждом месте в существующем списке?

+0

Где вы определяете элемент 'head'? –

+0

Я верю в метод addFirst? Если я не испортил его, и определение в этом методе не переносит его вниз –

ответ

1

Предполагаете, что вы определяете атрибуты head и size;

Для addLast Функция else Часть должна быть следующей.

for(p = head; p.next != null; p = p.next); 
p.next = new ListItem(x, null); 
size++; 
+0

(Обратите внимание на 'for ...;'. Я нахожу его более привлекательным для использования 'for ... {}' Или лучше; 'ListItem p = head; while (p.next! = null) {p = p.next;} ') –

+0

@JoopEggen да, вы правы. Я просто пытаюсь сделать минимальное изменение существующего кода. –

+0

Может ли кто-нибудь объяснить вопрос, который у меня был внизу? Какая часть кода говорит, что он прокручивается до конца, а не заменяет каждый p.next на int x? Мне кажется, что цикл for начинается во главе, до тех пор, пока p.next не станет нулевым, а в каждом случае заменит p на int x. –