Java双链表

时间:2015-08-10 20:04:59

标签: java doubly-linked-list

这是我的代码。但是当我运行它而不是打印列表时,它给了我这样的东西“DoublyLinkedList $ Node @ 3cd1a2f1Item:”。我不知道如何解决它。我非常信任我。请有人帮忙吗。谢谢:)

public class DoublyLinkedList<Item extends Comparable>{

class Node{
    private Item item;
    private Node next;
    private Node prev;

    public Node getNext() {
        return next;
    }

    public Node getPrev(){
        return prev;
    }

    public Item getItem(){
        return item;
    }

    public void setNext(Node next) {
        this.next = next;
    }


    public void setPrev(Node prev){
        this.prev= prev;
    }

    public void setItem(Item item){
        this.item = item;
    }
}

private Node head;

private int numberOfEelements;

public void sortedAdd(Item newItem) {

    if (head == null) {
        head = new Node();
        head.setItem(newItem);
        return;
    }
        Node dummy = head;
        Node current = dummy.getNext();

        while ( current!= null && (newItem.compareTo(current.getItem()) > 0) && (current != dummy))
            current = current.getNext();
        Node temp = new Node();
        temp.setNext(current);

    if (current == null) {
        current = new Node();
        current.setItem(newItem);
        return;
    }
        temp.setPrev(current.getPrev());
        (current.getPrev()).setNext(temp);
        current.setPrev(temp);
        temp.setItem(newItem);
        ++numberOfEelements;
}
public void sortedRemove(Item newItem) {

    if (head == null) {
        head = new Node();
        head.setItem(newItem);
        return;
    }
    Node dummy = head;
    Node current = dummy.getNext();
    while(current!= null && (newItem.compareTo(current.getItem()) !=0) && (current!= dummy))
        current = current.getNext();


    if (current == null) {
        current = new Node();
        current.setItem(newItem);
        return;
    }

    if (newItem.equals(current.getItem())) {
        (current.getPrev()).setNext(current.getNext());
        (current.getNext()).setPrev(current.getPrev());
        --numberOfEelements;
    }
}

@Override
public String toString(){
    Node current = head;
    StringBuilder sb = new StringBuilder();
    while(current != null){
        sb.append(current).append("Item: " + " ");
        current = current.getNext();
    }
    return sb.toString();

}


public static void main(String[] args) {

    DoublyLinkedList<Integer> list = new DoublyLinkedList<Integer>();
        list.sortedAdd(1);
        list.sortedAdd(5);
        list.sortedAdd(7);
        list.sortedAdd(9);
        list.sortedAdd(3);
        list.sortedAdd(2);

        list.sortedRemove(3);

    System.out.println(list.toString());
}
}

2 个答案:

答案 0 :(得分:4)

您的Node班级应该覆盖toString()这样的方法:

public String toString() {
    return null != item ? item.toString() : null;
}

答案 1 :(得分:0)

将toString()添加到Node,例如:

  public String toString() {
    return null != item ? item.toString() : null;
  }

并修复sortedAdd(),例如:

public void sortedAdd(Item newItem) {

    // new list
    if (head == null) {
        head = new Node();
        head.setItem(newItem);
        ++numberOfEelements;
        return;
    }
    Node current = head;
    Node prev = null;
    while (current != null && (newItem.compareTo(current.getItem()) > 0)) {
        prev = current;
        current = current.getNext();
    }
    // the last
    if (current == null) {
        current = new Node();
        current.setItem(newItem);
        current.setPrev(prev);
        prev.setNext(current);
        ++numberOfEelements;
        return;
    }
    //the first
    if (prev == null){
        prev = new Node();
        prev.setItem(newItem);
        current.setPrev(prev);
        prev.setNext(current);
        head = prev;
        ++numberOfEelements;
        return;
    }
    Node temp = new Node();
    temp.setNext(current);
    temp.setPrev(current.getPrev());
    (current.getPrev()).setNext(temp);
    current.setPrev(temp);
    temp.setItem(newItem);
    ++numberOfEelements;
}