2010-07-19 2 views
0

Я создаю связанную функцию списка для домашней работы, которая добавляет в любом индексе, за исключением последнего, но я не понимаю, как поставить условие targetList.addToIndexAt(81,0);без дозорных узловКак добавить в начало связанного списка в Java

EDIT Хорошо, я исправил все проблемы, кроме одного. На этот раз код запускает код: 81,0,0,0,0, что означает, что after возвращается к 0 каждому циклу кода. How do i make the after=after.tail retain it's number?

public void addToIndexAt(int n, int index){ 
    IntList addition = new IntList(n); 
    if(index==0){ //THIS IS MY PROBLEM 
      IntList beginning=this; 
     IntList after=this; 
     IntList current=this; 
     IntList temp=this; 
     while(after.tail!=null){ 
      after=after.tail; 
      temp=after; 
      after.head=current.head; 
     } 
     beginning.head=n; 
    } 
    else{ 
     IntList after = this; 
     IntList before = this; 
     int nafter = index; 
     int nbefore = index; 
     while(nafter>0){ 
      after = after.tail; 
      nafter--; 
      } 
     addition.tail = after; 
     while(nbefore>1){ 
      before = before.tail; 
      nbefore--; 
      } 
     before.tail= addition; 
    } 
} 
+1

Возможно, вы захотите изучить [узлы дозорных] (http://en.wikipedia.org/wiki/Linked_list#Sentinel_nodes), чтобы избежать необходимости в особых случаях для целей. –

+0

Подумайте, насколько проще управление списком будет если вы всегда действовали на головном узле списка, а не на произвольном узле. addToIndexAt в классе List, который поддерживает ссылку на голову, всегда может ходить по списку, находить узел для вставки, а затем делать вставку. Он мог бы даже обновить головной указатель внутри. –

ответ

3

Кажется, вы обрабатываете класс Node же, как класса List. Для меня это разные. Я бы предложил создать класс List, содержащий ссылку на первый узел в списке.

В качестве альтернативы вы можете попробовать немного изменить код, если метод insert возвращает новый заголовок списка.

+0

Я поддерживаю эту стратегию. Обычно я создаю класс Node и класс List. Класс node List имеет всю логику управления списком. Узел класса имеет только информацию, необходимую для построения списка – rsarro

+0

+1 композитный шаблон здесь не подходит. Дерево является хорошим примером для сложного шаблона, в котором можно рассматривать любой узел как дерево (под) –

+0

Я исправил его сам тем не менее – danutenshu

Смежные вопросы