In a way, Cantor’s first proof of the uncountability of the reals (which wasn’t by diagonalization) is more directly along the lines of this picture. [Indeed, my feelings are that Cantor’s first proof is the only one which truly deals with the reals, as I prefer to think of the diagonalization proof as not dealing with the reals at all, but rather with 2^N (which, under the standard topology, is homeomorphic to 3^N, 10^N, etc., and to Cantor space, but not the reals), P(N), N^N [Baire space, homeomorphic to the irrationals but not the reals], and other such powers. Of course, in mathematical orthodoxy, topology is extra structure imposed on a set after the fact, so we can construct discontinuous functions, and, in particular, identify the reals with all of the above; however, I feel, superior foundational frameworks for most purposes are those which keep these distinct (as can be accomplished very easily by switching from classical to intuitionistic logic (which is consistent with the principle that all real functions are continuous), though I would want to push even further), in recognition of the fundamental intuition that, among other things, the continuum is a connected space and thus should admit only constant functions into 2].
Anyway, stuffing the ideological hijack, the way Cantor’s first proof works is as follows: suppose you have some countable sequence of reals. We shall construct from it a system of inequalities such that nothing in the list satisfies all of these constraints, but some real number does. This will show that the list is incomplete.
How do we do so? We’ll start off with no constraints and start scanning through the list. Every time we find a number C in the list which satisfies all our constraints so far, we’ll add a new constraint which rules it out [either “The number I’m thinking of is less than C” or “The number I’m thinking of is greater than C”, alternating], and then keep going through the rest of the list, carrying out the same process.
Obviously, by design, no number in the list will satisfy all the constraints we ever announce. But how do we know some real number does? Well, let A be the least upper bound of all the values our number is constrained to be above (call these the “under-numbers”), and let B be the greatest lower bound of all the values our number is constrained to be below (call these the “over-numbers”). Note that, given any under-number L and over-number R, one of the two constraints was added before the other, so that either L satisfies the constraint of being under R or R satisfies the constraint of being over L; thus, either way, L < R. Since every under-number is less than every over-number, we can conclude that A <= B. Now, either there was a last constraint generated (in which case, because under- and over-numbers are disjoint, we must have that A < B) or there was no last constraint generated (in which case, A is a strict upper bound on the under-numbers, and B is a strict lower bound on the over-numbers). Either way, there is a number between A and B which satisfies all the constraints. Q.E.D.