2015-12-16 5 views
2

Я изучаю Linked List в Java, и я пытаюсь добавить числа в хвост, скажем, 10 чисел. Однако после вставки я могу только получить последние два числа, я не понимаю, что я делаю неправильно. Вот мой код:Java Связанный список добавления Tail

import java.util.*; 
public class LinkTry 
{ 
    public static void main(String args[]) 
    { 
     Scanner sx = new Scanner(System.in); 
     Node N = new Node(); 
     for(int i=0;i<10;i++) 
     { 
      Node last = new Node(); 

      while(N.link!=null) 
       N=N.link; 

      last.data = sx.nextInt(); 
      N.link = last; 

     } 

     System.out.println(""); 


     for(Node x=N;x!=null;x=x.link) 
      System.out.print("-->"+x.data); 

    } 

    public static class Node 
    { 
     int data; 
     Node link; 
    } 
} 

Я имею немного неприятности, как передается адрес здесь, ответ, объясняющий адресацию памяти в Linked списке было бы очень полезно.

ответ

0

Проблема заключается в том, что эта линия:

   N=N.link; 

вызывает N больше не указывают на голову списка, в то время как строки:

 for(Node x=N;x!=null;x=x.link) 

предполагает, что N все еще указывает на голову списка.

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

+0

Хорошо, мне было интересно, как эти объекты указывают друг на друга? Любая хорошая ссылка, которую стоит прочитать для новичка? – OBX

1
import java.util.Scanner; 
public class LinkTry 
{ 
    public static void main(String args[]) 
    { 
     Scanner sx = new Scanner(System.in); 
     Node first = null; 
     Node last = null; 

     for(int i=0;i<10;i++) { 
      Node current = new Node(); 
      current.data = sx.nextInt(); 

      if (first == null) { 
       first = current; 
       last = current; 
      } else { 
       last.link = current; 
       last = current; 
      } 
     } 

     System.out.println(""); 


     for(Node x=first;x!=null;x=x.link) 
      System.out.print("-->"+x.data); 

    } 

    public static class Node 
    { 
     int data; 
     Node link; 
    } 
} 
+0

Спасибо за код :) – OBX

0

Проблема в цикле for. Как вы итерацию через петлю вы потеряли ссылку на главу списка вы начали, т.е. Node N = new Node();

вопрос в течение цикла, выделены между ** ** ниже

for(int i=0;i<10;i++) 
{ 
    Node last = new Node(); 

    while(N.link!=null) 
     N=N.link; 

    last.data = sx.nextInt(); 
    **N.link = last;** 

} 

В конце из 10 итераций, теперь «N» указывает на последний, но один узел. И поэтому он печатает только последние 2 элемента.

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