2016-02-09 3 views
0

У меня была задача добавить элемент строки типа по индексу в двойном связанном списке. Я реализовал его как метод класса Double_list. Также у меня есть класс List_node.Добавить элемент в двойной связанный список

public void Add(String element, int index) 
{ 
    if(index < 0 || index > size) 
    { 
     throw new IndexOutOfBoundsException(); 
    } 
    if(element == null) 
    { 
     throw new NullPointerException(); 
    } 
    if(index == size) 
    { 
     this.Add(element); 
    } 
    else 
    { 
     List_node next_node = get_node(index); 
     List_node prev_node = next_node.prev; 

     List_node new_node = new List_node(element, prev_node, next_node); 

     next_node.prev = new_node; 
     prev_node.next = new_node; 
     size++; 
    } 
} 

public boolean Add(String element) 
{ 
    if(element == null) 
    { 
     throw new NullPointerException(); 
    } 

    List_node last = tail.prev; 

    List_node new_node = new List_node(element, last, tail); 
    last.next = new_node; 
    last.prev = new_node; 

    size++; 
    return true; 
} 

private List_node get_node(int index) 
{ 
    int cur_index = 0; 
    List_node cur_node = head.next; 

    while(cur_index < index) 
    { 
     cur_node = cur_node.next; 
     cur_index++; 
    } 
    return cur_node; 
} 

Когда я добавить несколько элементов, размер списка увеличивается, но список отображается таким образом, как я добавил только один элемент. И когда я пытаюсь удалить элементы по индексу, который больше 0 из списка, я получаю NullPointerException. Можете ли вы мне помочь и сказать, пожалуйста, где я ошибся?

+1

Вам нужно разместить больше своего кода - в частности, методы Add (element) и get_node (index). –

+0

Можете ли вы добавить исключение, которое попадете на почту? – bradimus

+1

Вам нужно увеличить размер после 'this.Add (element)'? – DSlomer64

ответ

2

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

Add, изменение last.prev = new_node; до tail.prev = new_node;.

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