2013-11-17 4 views
0

Когда я вызываю эту вставку перед методом, она делает то, что она должна делать сначала, но затем она заставляет связанный список продолжать и продолжать навсегда, пока i click stop (с отпечатком системы). Я не могу найти, где это идет не так в этом методеСвязанный список - insert before метод заставляет связанный список продолжать навсегда

private boolean insertBefore(Node aNode, Node beforeNode) 
    { 
     Node currentNode; 
     Node prevNode; 
     //aNode= new Node(); 

     currentNode = this.getHead(); 

     while(currentNode!=null && currentNode.getNext()!=aNode) 
     { 

      if(currentNode == beforeNode) 
       { 
        prevNode = this.getPrevious(beforeNode); 
        prevNode.setNext(aNode); 
        aNode.setNext(beforeNode); 
        //aNode.setNext(currentNode); 
        return true; 
       } 

      currentNode = currentNode.getNext(); 
     } 
     currentNode.setNext(beforeNode); 

     return false; 

    } 
+2

Как этот вопрос отличается от этого: http://stackoverflow.com/questions/20023562/linked-list-cant-figure-out-why-this-insert-before-method-is-causing-the- ссылка? –

+0

Я вначале вложил неправильный метод в этот, каждый, кто комментировал, комментировал другой метод вместе – user2997963

ответ

1

Это намного проще, чем код, указанный выше, поскольку у вас есть дважды связанный список не существует никакой необходимости в цикле по всем элементам:

private boolean insertBefore(Node aNode, Node beforeNode) { 
    if(beforeNode.getPrevious() != null) { 
     beforeNode.getPrevious().setNext(aNode); 
     aNode.setPrevious(beforeNode); 
    } else { 
     head = aNode; 
    } 
    aNode.setNext(beforeNode); 
    beforeNode.setPrevious(aNode); 
} 

Если во главе списка находится beforeNode, ваш новый узел станет головкой.

В противном случае есть узел за вашим beforeNode. Теперь это должно указывать на ваш новый узел.

В любом случае, следующий указатель вашего нового узла указывает на узел beforeNode.

+0

, который все еще заставляет его продолжать навсегда – user2997963

+0

@ user2997963 Чтобы «продолжать навсегда», узлы связанных списков должны содержать циклическую ссылку. Код выше * должен * предотвратить это. – jwa

+0

Только что увидел новый, к сожалению, нет метода setPrevious – user2997963

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