public static LinkedListNode addReverse (LinkedListNode n1, LinkedListNode n2) {
		// returns a new pointer to the head of the list of addition
		LinkedListNode		h1 = n1;
		LinkedListNode		h2 = n2;
		int				 carry = 0;	// store carry of summation
		LinkedListNode	  head = new LinkedListNode(0); // head of the result

		while ( h1 != null && h2 != null ) {
			int		d = h1.data + h2.data + carry;
			assert( d < 20 );
			carry     = d / 10;
			int	    onedigit = d % 10;
			head.appendToTail( onedigit );

			h1 = h1.next; h2 = h2.next;
		}

		LinkedListNode		nd = null;	
		if ( h1 != null )
			nd = h1;
		else
			nd = h2;

		while ( nd != null ) {
			head.appendToTail( nd.data + carry );
			carry = 0;
			nd  =  nd.next;
		}

		return head.next;
	}