2015-01-16 2 views
-1

Я пытаюсь создать метод, который добавит узел в мой связанный список. Метод принимает строку. Это метод, который я создал:добавить метод не работает для связанного списка в Java

public void add(String x) 
    { 
     Node newNode = new Node(); 
     newNode.element = x; 
     newNode.nextNode = firstNode; 
     firstNode = newNode; 
    } 

К сожалению, этот код не работает. Есть ли способ изменить его, чтобы он работал?

Вот вся информация, которую я была предоставлена:

Связанный список класса с узлом внутреннего класса:

class LinkedList implements StringCollection 
{ 
private static class Node 
{ 

    public String element; 
    public Node nextNode; 
    public Node (String element) 
    { 
    this.element = element; 
    this.nextNode = null; 
    } 

} 
private Node firstNode; 
public NodeStringCollection() 
{ 

    firstNode = null; 

} 

//add method goes here 

public String toString() 
{ 

    String s = ""; 
    Node node = firstNode; 
    while (node != null) 
    { 
    s = s + node.element + " "; 
    node = node.nextNode; 
    } 
    return s; 

} 
} 

Испытано Linked Класс:

Class Test 
{ 
    public static void main(String [] args) 
    { 
    StringCollection sc = new LinkedList(); 
    sc.add (new String ("A")); 
    sc.add (new String ("B")); 
    sc.add (new String ("C")); 
    sc.add (new String ("D")); 
    System.out.println (sc); 
    int countStrings = sc.size(); 
    System.out.println (countStrings); 
    } 
} 

Выход

D C B A 
4 
+1

Во-первых, непонятно, почему вы вызываете конструктор 'String (String)'. Затем ваш код работает, потому что он добавляет новый узел. Он помещает его в * фронт * списка - это проблема? Каким образом выход не тот, который вы ожидаете? –

+1

«К сожалению, этот код не работает». Вам нужно подробно остановиться на этом. В чем проблема? – JamesB

ответ

0

Я исправил ваш код. Вы ошиблись в том, что элемент, добавленный в LinkedList, заменил старый firstNode. Таким образом, последний узел, который вы добавите в свою реализацию, станет новым первым узлом. Поэтому ваш LinkedList напечатан D C B A, который является обратным тому, каким он должен быть.

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

код

public class LinkedList { 
    public static class Node { 
     public String element; 
     public Node nextNode; 

     public Node(String element) { 
      this.element = element; 
      this.nextNode = null; 
     } 

    } 

    private Node firstNode; 
    private Node lastNode; 

    public LinkedList() { 
     firstNode = null; 
     lastNode = null; 
    } 

    public void add(String x) { 
     Node newNode = new Node(x); 

     if (firstNode == null) 
      firstNode = newNode; 
     if (lastNode != null) 
      lastNode.nextNode = newNode; 
     lastNode = newNode; 
    } 

    public String toString() { 
     String s = ""; 
     Node node = firstNode; 
     while (node != null) { 
      s = s + node.element + " "; 
      node = node.nextNode; 
     } 
     return s; 
    } 
} 

Пример кода

public static void main(String args[]) throws Exception { 
    LinkedList sc = new LinkedList(); 
    sc.add(new String("A")); 
    sc.add(new String("B")); 
    sc.add(new String("C")); 
    sc.add(new String("D")); 
    System.out.println(sc); 
} 

Выход

A B C D 
Смежные вопросы