I’ve been thinking about it a bit more, and I think I’ve figured out an algorithm that gives a solution for any even N. Specifically:

Team 1’s schedule: N, 2, 3, 4, 5, . . . , N-1

Team 2’s schedule: N-1, 1, N, 3, 4, 5, . . . , N-2

Team 3’s schedule: N-2, N-1, 1, 2, N, 3, 4, 5, . . . , N-3

.

.

.

Team i’s schedule (i < N): N-i+1, N-i+2, N-i+3, . . ., N-1, 1, 2, 3, . . ., i-1, N, i+1, i+2, . . ., N-i

.

.

.

Team N-1’s schedule: 2, 3, 4, . . . N-2, N,

Team N’s schedule: 1, N/2 + 1, 2, N/2 + 2, 3, N/2 + 3, . . . , N/2 + (N/2 - 1), N/2

So for example if you had a six team league (with team’s numbered 1 to 6), team 1 could play teams 6, 2, 3, 4, 5 in that order. Team 2 could play teams 5, 1, 6, 3, 4, in that order. Team 3 would play 4, 5, 1, 2, 6, etc. Obviously you can permute the order of the games as long as you apply the *same* permutation to every team’s schedule.

So it seems like it works for any even N. However, it doesn’t seem obvious (to me anyway), because determining one team’s schedule fixes positions in another team’s schedule, such that if you choose the matchups at random you’re likely to get stuck part way through. If I look a little more at why the method I just came up with appears to work, it could probably be turned into some sort of proof . . . but at any rate, if there’s a simple proof that it can always be done for even N, I’d like to see it.