2014-10-10 14 views
5

Tôi đã tạo thành công một danh sách liên kết từ đầu. Cho đến nay nó chỉ có thể thêm dữ liệu. Không xóa hoặc bất cứ điều gì ưa thích như thế.Làm cách nào để in dữ liệu trong LinkedList

Tôi có thể thêm chuỗi, số nguyên v.v ... nhưng tôi gặp sự cố khi in dữ liệu tôi đã thêm. Làm thế nào để làm điều đó? Tôi đoán tôi sẽ phải lặp qua nó trước, nhưng làm sao? '

Đây là lớp Node tôi:

public class Node { 
    T data; 
    Node<T> nextNode; 

    public Node(T data) { 
     this.data = data; 
    } 

    public String toString() { 
     return data +""; 
    } 
} 

Đây là lớp LinkedList:

public class LinkedList <T> { 

Node<T> head; 
Node<T> tail; 

public void add (T data) { 
    // where to add statements. if its empty or not 
    Node<T> node = new Node<T> (data); 

    if (tail == null) { // empty list 
     // nothng in the node = tail = node; 
     head = node; 
     tail = node; 
    } 
    else { // non empty list, add the new boogie train to the tail 
     tail.nextNode = node; // new node pointing to tail 
     tail = node; // update 
    } 
} 

Và đây là chính. Tôi tạo một đối tượng ra khỏi Danh sách liên kết ở đâu và sử dụng phương thức thêm chung để thêm dữ liệu của tôi. Nhưng làm thế nào để in nó ra trên màn hình? Cảm ơn trước.

public static void main(String[] args) { 
    LinkedList<Object> list = new LinkedList<Object>(); 
    list.add(15); // boogie1 = head 
    list.add(16); 
    list.add(10); // boogie end = tail 
+0

Xin lỗi vì mã sai lầm. Dường như luôn luôn bị xáo trộn khi tôi cố thêm mã. – Kharbora

+0

Bạn chỉ cần sao chép và nhấn Ctrl + K. Nếu bạn đã định dạng đúng và sử dụng khoảng trống cho thụt đầu dòng thì nó sẽ vẫn như vậy. – EpicPandaForce

Trả lời

1

Bạn cần phải ghi đè lên các phương pháp toString() trong lớp LinkedList<T> bạn

6

Thêm một toString phương pháp để lớp LinkedList bạn

public String toString() { 
    Node<T> curr = head; 
    StringBuilder sb = new StringBuilder(); 
    sb.append("LinkedList ["); 
    while (curr != null) { 
     sb.append(curr.data); 
     if (curr.nextNode != null) { 
      sb.append(", "); 
     } 
     curr = curr.nextNode; 
    } 
    sb.append("]"); 
    return sb.toString(); 
} 

Sau đó gọi nó là trong phương pháp chính của bạn:

System.out.println(list.toString()); 
+0

Phức tạp và khó hiểu mã của bạn, nhưng cảm ơn bạn. – Kharbora

+0

bạn thấy khó khăn gì về nó? – yunandtidus

1

Vâng, bạn có thể triển khai mẫu Iterator: http://sourcemaking.com/design_patterns/iterator/java/1

Hoặc bạn chỉ cần thực hiện một phương pháp mà có thể in các yếu tố nút, hoặc thực hiện một cái gì đó trên mỗi trong số họ, một chút như thế này:

public class LinkedList <T> { 

    Node<T> head; 
    Node<T> tail; 

    public void add (T data) { 
     ... 
    } 

    public void forEach(java.util.function.Consumer<T> consumer) 
    { 
     for(Node<T> currentNode = head; currentNode != null; currentNode = currentNode.nextNode) 
     //I am assuming the last node points to null in nextNode 
     // and that head is initialized to null if the list is empty 
     { 
      consumer.accept(currentNode); 
     } 
    } 
} 

Sau đó chỉ cần làm

linkedList.forEach(x -> System.out.println(x.toString()); 

Nếu tất cả mọi thứ đúng, điều này sẽ hoạt động trong Java 8.

1

tạo phương thức getter trong lớp LinkedList của bạn.

public Node getHead() { 

    return head; 
} 

trong bạn main()

public static void main(String[] args) { 

    LinkedList<Object> list = new LinkedList<>(); 
    list.add(15); // boogie1 = head 
    list.add(16); 
    list.add(10); // boogie end = tail 

    Node node = list.getHead(); 

    // Break the loop after the variable reaches null, i.e. end of list. 
    // The un initialised instance non-primitive variable is always null by default. 
    while(node != null) { 

     System.out.println(node); // Calls the toString() from class Node. 
     node = node.nextNode; // Move to next node. 
    } 
} 

Hy vọng điều này làm việc cho bạn.

Các vấn đề liên quan