15-200 Lecture 7 (Thursday, July 13, 2006)

Today's Class

During today's lecture, we discussed and implemented the following code for the linked list and node. We'll continued next class.

The LinkedListNode Implementation

 
class LinkedList {

  private Node head;
  private Node tail;
  private int count;

  
  private class Node {
  
    private Object item;
    private Node next;
    
    
    public Node (Object item, Node next) {
      this.item = item;
      this.next = next;
    }
    
    
    public Node (Object item) {
      this.item = item;
      this.next = null;
    }
    
    
    public Object getItem() {
      return item;
    }
    
    
    public Node getNext() {
      return next;
    }
    
    
    public void setNext(Node next) {
      this.next = next;
    }
    
    
    public boolean equals(Object o) {
      Node n = (Node) o;
      
      if (!this.item.equals(n.item))
        return false;
      if (this.next != n.next)
        return false;
        
      return true;
    }
  
  
    public String toString() {
    
      if (next != null)
        return "" + getItem() + "--->" + next.getItem();
      else
        return "" + getItem() + "--->" + "END";
    }
  
  }


  public LinkedList() {
    head = tail = null;
    count = 0;
  }


  public void addFirst(Object o) {
    head = new Node (o, head);
    
    if (count == 0)
      tail = head;
    
    count++;
  }


  public void addLast(Object o) {
    Node end;
    end = new Node (o, null);
    
    tail.setNext(end);
    
    tail = end;
    
    count++;
    
  }


  public Object removeFirst() {
  
    if (count == 0)
      return null;
    
    Object savedItem = head.getItem();
    
    head = head.getNext();
    count--;
    
    if (count == 0)
      tail = null;
    
    return savedItem;
  
  }
  
  
  public Object removeLast() {
  
    if (count == 0)
      return null;
      
    if (count == 1)
      return removeFirst();
          
    Object savedItem = tail.getItem();
    
    Node index;
    for (index=head; index.getNext() != tail; index = index.getNext())
    ;
    
    index.setNext(tail.getNext());
  
    return savedItem;
  }
}