Write a function that adds two numbers stored in a linked list and returns the sum
Strictly speaking, the code does not solve the problem. As an interviewer I'd expect a clearly defined

    List add(List l1, List l2)


method.

At the very least, rename Run to add, and do not CreateNumbers in it, but pass them as parameters.
Since it is guaranteed that every node contains a digit, the sum may never exceed 19. This means, among other things, that there is no need for decimal. Everything can be done with primitive types, e.g.

    alpha = sum &gt; 10;
    sum -= alpha * 10;


As a side note, the entity you call alpha is traditionally called carry.
The do {} while() approach seems to create more problems than it solves. An immediate manifestation is duplication of n1 != null tests. Consider

    while (n1 != null &amp;&amp; n2 != null) {
        // addition logic here
        n1 = n1.Next;
        n2 = n2.Next;
    }


and promote the carry along the remainder of the longer list in a separate loop.
Consider creating a dummy head for a resulting list. It is a standard trick to avoid a special case of prev == null, e.g.

    Figure dummy = new Figure;
    Figure tail = dummy;

    while (....) {
        ....
        tail.next = new Figure(sum);
        tail = tail.next;
    }
    ....
    return dummy.next;