2014-10-30 2 views
1

Я изучаю связанный список в Java и написал пример кода для практики. В основном это единственный список, связанный с ним. Код работает нормально, но он отменяет вывод. То есть он печатает cory, joe и tom, и я хочу, чтобы на выходе были tom, joe и cory. Том - первый узел. Как мне обойти это или так, как работает один связанный список. То есть он всегда меняет результаты?связанный список учебник в java

public class LinkedList { 
public String name; 
public LinkedList next; 
public LinkedList(String name) 
{ 
    this.name = name; 
    this.next = null; 
} 
public String toString() 
{ 
    return name; 
} 
public static void main(String[] args) { 
    // TODO Auto-generated method stub 
     Linked l = new Linked(); 
     l.insert("tom"); 
     l.insert("joe"); 
     l.insert("cory"); 
     l.print(); 

    } 
} 
class Linked 
{ 
LinkedList first; 

public Linked()//initialize 
{ 
    this.first = null; 
} 

public void insert(String name) 
{  
    LinkedList g = new LinkedList(name); 
    g.next = first; 
    first = g; 
} 
//checks if the list is empty 
public boolean isEmpty() 
{ 
    return (first ==null); 
} 
public void print() //displays the list 
{ 
    LinkedList t = first; 
    while(t!=null) 
    { 
     System.out.println(t); 
     t = t.next; 
    } 
    } 
} 
+0

LinkedList ваш собственный класс ..? –

+0

@BlackPanther да разработал его с нуля, чтобы понять концепции и как это работает перед использованием библиотек –

+0

проверить мой ответ –

ответ

2

Вы вставляете в начало LinkedList. Если вы хотите добавить, то вставьте новый узел после последнего узла. Вам понадобится ссылка на хвост.

public String name; 
    public LinkedList next; 
    public LinkedList(String name) 
    { 
     this.name = name; 
     this.next = null; 
    } 
    public String toString() 
    { 
     return name; 
    } 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
      Linked l = new Linked(); 
      l.insert("tom"); 
      l.insert("joe"); 
      l.insert("cory"); 
      l.print(); 

     } 
    } 
    class Linked 
    { 
    LinkedList first; 
    LinkedList tail; 

    public Linked()//initialize 
    { 
     this.first = null; 
     this.tail = first; 
    } 

    public void insert(String name) 
    {  
     LinkedList g = new Test(name); 
     if(isEmpty()) 
     { 
      first = g; 
      tail = first; 
     } 
     else 
     { 
      tail.next = g; 
      tail = g; 
     } 
    } 
    //checks if the list is empty 
    public boolean isEmpty() 
    { 
     return (first ==null); 
    } 
    public void print() //displays the list 
    { 
     LinkedList t = first; 
     while(t!=null) 
     { 
      System.out.println(t); 
      t = t.next; 
     } 
} 

Если вы заметили, я добавил хвост ссылку и вместо того, чтобы вставить новый объект в начале я прикрепить его к концу LinkedList. Вы можете изменить имя метода для добавления. На самом деле у вас может быть 2 метода, чтобы сохранить ваш, как это ... затем добавьте мою новую вставку метода, но назовите ее так, чтобы вы могли вставлять ее с начала или до конца LinkedList.

+0

, так что если я использую ссылку на хвост, это означает, что это уже не один связанный список. –

+0

no ill post code example ... – brso05

+0

@e_hello проверить мой обновленный пост, дайте мне знать, что вы думаете ... – brso05

1

Как указано в @ brso05, вы вставляете значения в голову, а не в хвост.

Это

tom
joe -> tom
cory -> joe -> tom

вместо этого вы должны вставить его в хвост, как этот

public void insert(String name) 
{ 
    if(first==null) 
    { 
     LinkedList g = new LinkedList(name); 
     g.next = null; 
     first = g; 
    } else { 

     LinkedList g = new LinkedList(name); 

     if (first.next==null) { 
      g.next = null; 
      first = g; 
      return; 
     } 

     LinkedList l=first.next; 
     for(;l!=null;l=l.next){ 
     if(l.next==null) { 
      l.next = g; 
      g.next = null; 
      break; 
     } 
     } 


    } 

} 

Это не очень хорошее решение, оно должно быть импровизированное

+0

печатает только тома и кори. Я думаю, вам нужна еще одна ссылка на хвост. Я попробовал запустить ваш код. Он пропускает Джо. –

+0

проверить это сейчас –

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