public Node add(Node head1, Node head2) {
   if (head1 == null || head2 == null) {
     throw new IllegalArgumentException();
   }
   LinkList ll = new LinkList();
   int size1 = ll.size(head1);
   int size2 = ll.size(head2);
   Node larger = null;
   Node smaller = null;
   if (size1 >= size2) {
     larger = head1;
     smaller = head2;
   } else {
     larger = head2;
     smaller = head1;
   }
   int diff = Math.abs(size1 - size2);
   Node largerStart = larger;
   while (diff > 0) {
     largerStart = largerStart.next;
     diff--;
   }
   Node result = addWithCarry(largerStart, smaller);
   Node result1 = addRemaining(larger, largerStart);
   if (carry != 0) {
     Node top = Node.newNode(carry);
     result1 = ll.addAtFront(top, result1);
   }
   if (result1 != null) {
     Node tail = result1;
     while (tail.next != null) {
       tail = tail.next;
     }
     tail.next = result;
     return result1;
   }
   return result;
 }