class Node {
  Node(int val) {
    this.val = val;
  }
  public String toString() {
    return Integer.toString(val);
  }
  int val;
  Node next = null;
}

public class List
{
  private Node head = null;
  public void prepend(int val) {
    Node q = new Node(val);
    q.next = head;
    head = q;
  }
public void append(int val) {
  Node q = new Node(val);
  if(head == null) {
    // prepend
    head = q;
  } else {
    Node prev = head;
    while(prev.next != null)
      prev = prev.next;
    prev.next = q;
  }
}
  public Node find(int val) {
    Node p=head;
    while(p != null && p.val != val)
      p = p.next;
    return p;
  }
  public void insert(int val) { // sorted
    Node q = new Node(val);
    Node p = head, prev = null;
    while(p != null && p.val < val) {
      prev = p;
      p = p.next;
    }
    q.next = p;
    if(p == head)
      head = q;
    else
      prev.next = q;
  }
  public void remove(int val) {
    Node p=head, prev = null;
    while(p != null && p.val != val) {
      prev = p;
      p = p.next;
    }
    if(p != null) {
	    if(p == head)
	      head = head.next;
	    else
	      prev.next = p.next;
		}
  }
  public String toString() {
    StringBuilder result = new StringBuilder();
    result.append("{");
    Node p=head;
    while(p != null) {
      result.append(" " + p.val);
      p = p.next;
    }
    result.append(" }");
    return result.toString();
  }
  public static void main(String[] args) {
    List l1 = new List();
    l1.prepend(6);
    l1.prepend(5);
    l1.prepend(4);
    Out.println("l1 = " + l1);
    l1.append(8);
    l1.append(9);
    Out.println("l1 = " + l1);
    l1.prepend(2);
    l1.prepend(1);
    Out.println("l1 = " + l1);
    Out.println(l1.find(8));
    Out.println(l1.find(3));
    l1.insert(3);
    Out.println("l1 = " + l1);
    l1.insert(7);
    Out.println("l1 = " + l1);
    l1.remove(1);
    l1.remove(3);
    l1.remove(5);
    l1.remove(7);
    l1.remove(9);
    Out.println("l1 = " + l1);
  }
}

