2015-03-17 2 views
0

При создании ручного связанного списка с использованием рекурсивных методов я не могу понять, почему мой метод Insert Before отключает список после добавления нового узла. Список не отсортирован. Я новичок в этом, и любая помощь будет оценена по поводу того, почему это происходит.Вставка рекурсивного единственного связного списка Перед тем, как отключить остальную часть списка

Мой класс узел

class Csc2001Node 
{ 
    protected char ch; 
    protected Csc2001Node next; 

    /* 
    * Construct a Csc2001Node with the given character value 
    * @param c - The character 
    */ 
    public Csc2001Node (char c) 
    { 
     this.ch = c; 
     this.next = null; 
    } 
} 

Мои методы из Linked класса List

/* 
    * Recursively prints characters in a list 
    * @param head The had of current list 
    * @return Current list 
    */ 
    private String recursePrintList(Csc2001Node head){ 

     if(head == null) 
      return "List is empty\n"; 
     else 
      while(head.next!=null) 
      { 
      return head.ch + "\n" + recursePrintList(head.next); 
      } 

     return head.ch + "\n";  
    }  

    /* 
    * Wrapper method for printing list 
    * @return the list as a string 
    */ 
    public void recursePrintList(){ 
     System.out.print(recursePrintList(head)); 
    } 

/* 
    * Inserts a character before first occurrence of another specified 
    * character in the list. 
    * 
    */  
    public Csc2001Node insertBefore(char key, Csc2001Node head, char toInsert) 
    { 
     if(head==null){ 
      return head = new Csc2001Node(toInsert); 
     }      
     else if(head.ch == key) 
      return new Csc2001Node(toInsert); 
     else 
      head.next = insertBefore (key, head.next, toInsert); 

     return head; 
    }  

    /* 
    * Wrapper method for inserting a character before another 
    */ 
    public void insertBefore(char target, char toInsert){ 
     head = insertBefore(target, head, toInsert); 
    } 

Вывод о том, что происходит

Adding the characters a, s, t, e, r to the list and printing out the list 
e 
a 
s 
t 
e 
r 
Testing if the character r is in the list, print out Yes if it is and No otherwise 
Yes 
Printing out the value of size for this list 
6 
Trying to insert Y before s in the list and printing out the list 
e 
a 
Y 
Printing out the value of size for this list 
3 
Trying to insert V before e into the front of the list and printing out the list 
V 

ответ

2
else if(head.ch == key) 
     return new Csc2001Node(toInsert); 

ставит новый символ в качестве последний элемент в списке и s o ваш список завершен. Вы хотите что-то вроде

else if (head.next.ch.equals(key)) { 
    nextNode = head.next; 
    head.next = new Csc2001Node(toInsert); 
    head.next.next = nextNode; 
} 
+0

спасибо! –

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

  • Нет связанных вопросов^_^