The memory usage of an Adjacency List depends on the number of edges, not nodes. Space complexity: .
Even if , if , you only store about entries total (accounting for both directions in undirected graphs). Compare this to the matrix approach which would need cells. For sparse graphs where is much smaller than , adjacency lists are the clear winner. This is why they are the default choice in competitive programming.