2016-09-17 60 views
0

在教科書「Data Structures and Algorithms with Java 6E」中發現,當嘗試創建新節點時,此實現給addFirst和addLast方法帶來錯誤。它說不能從SinglyLinkedList.Node轉換爲SinglyLinkedList.Node這本教科書單鏈表實現有什麼問題?

下面是代碼像下面

public class SinglyLinkedList<E> { 


private static class Node<E>{ 
    private E element; 
    private Node<E> next; 
    public Node(E e, Node<E> n){ 
     element = e; 
     next = n; 
    } 
    public E getElement(){ 
     return element; 
    } 
    public Node<E> getNext(){ 
     return next; 
    } 
    public void setNext(Node<E> n){ 
     next = n; 
    } 
} 

private Node<E> head = null;   //head node of list or null if empty 
private Node<E> tail = null;   // tail node of list or null if empty 
private int size = 0;   //size of list 

public SinglyLinkedList(){}  //constructs an initially empty list 

public int size(){    //size getter 
    return size; 
} 

//accessors 
public boolean isEmpty(){  //isList empty getter 
    return size ==0; 
} 

public E first(){    //head data getter 
    if(isEmpty()){ 
     return null; 
    } 
    return head.getElement(); 
} 

public E last(){    //tail data getter 
    if(isEmpty()){ 
     return null; 
    } 
    return tail.getElement(); 
} 

//updators 
public void addFirst(E e){ 
    head = new Node<>(e, head); 
    if(size == 0){ 
     tail = head; 
    } 
    size++; 
} 

public void addLast(E e){ 
    Node<E> newest = new Node<>(e, null); 
    if(isEmpty()){ 
     head = newest; 
    } 
    else{ 
     tail.setNext(newest); 
    } 
    tail = newest; 
    size++; 
} 

public E removeFirst(){ 
    if(isEmpty()) return null; 

    E answer = head.getElement(); 
    head = head.getNext(); 
    size--; 
    if(size==0) 
     tail = null; 
    return answer; 
} 
} 

回答

0

更新您的addFirstaddLast方法:

public void addFirst(E e) { 
    head = new Node<E>(e, head); // update here 
    if(size == 0){ 
     tail = head; 
    } 
    size++; 
} 

public void addLast(E e){ 
    Node<E> newest = new Node<E>(e, null); // update here 
    if(isEmpty()){ 
     head = newest; 
    } 
    else{ 
     tail.setNext(newest); 
    } 
    tail = newest; 
    size++; 
} 

然後我能夠創建和與它一起工作。

public class A { 
    public static void main(String[] args) { 
     SinglyLinkedList list = new SinglyLinkedList<Integer>(); 
     list.addFirst(new Integer(1)); 
     list.addLast(new Integer(2)); 
     System.out.println(list.first()); 
     System.out.println(list.last()); 
    } 
}