Czy nie powinno się to zmienić i x->next powinien wskazywać na to samo co l->next czyli też 3?
Nope.
Może spójrz na to tak: każda z tych linii zmienia wartość jednego wskaźnika (jednej wartości w pamięci). Innymi słowy, w każdym kroku, dokładnie jedna strzałka zmieni swój "cel".
W kroku 3, strzałka przy "0" zmieniła swój "cel" na rzecz na którą wskazuje l->next.
W kroku 4, strzałka przy "7" (bo wskaźnik "l" wskazuje na węzeł z "7") zmienia swój "cel" na rzecz na którą wskazuje x.
(Gdyby w kroku 4 strzałka przy "9" miała się zmienić, to gdzieś w tej linii musiałoby być "x->next", bo przed krokiem 4 to był jedyny sposób by dostać się do tej strzałki.)