// Helper method to add new nodes to the end of a linked list.
  private void addToEnd(Node toAdd) {

    if (poly == null) {
      poly = toAdd;
    } else {
      Node tmp;
      for (tmp = poly; tmp.next != null; tmp = tmp.next) {}
      tmp.next = toAdd;
    }
  }
  // Helper method to combine all like terms in a list. MUST BE SORTED FIRST.
  private void compress() {

    Node tmp = poly;

    while (tmp.next != null) {
      if (tmp.term.degree == tmp.next.term.degree) {
        tmp.term.coeff += tmp.next.term.coeff;
        tmp.next = tmp.next.next;
      } else if (tmp.term.degree < tmp.next.term.degree) tmp = tmp.next;
    }
  }
  // Helper method to sort an unsorted linked list in ascending order. All like degrees will be next
  // to each other.
  private void sort() {

    Polynomial newList = new Polynomial();

    for (Node tmp1 = poly; tmp1 != null; tmp1 = tmp1.next) {
      Node n = new Node(tmp1.term.coeff, tmp1.term.degree, null);

      if (newList.poly == null) newList.poly = n;
      else {
        for (Node tmp2 = newList.poly; tmp2 != null; tmp2 = tmp2.next) {
          if (tmp2.next == null) {
            tmp2.next = n;
            break;
          } else if (tmp2.next.term.degree > n.term.degree) {
            n.next = tmp2.next;
            tmp2.next = n;
            break;
          }
        }
      }
    }
    poly = newList.poly;
  }