Source: https://courses.cs.washington.edu/courses/cse143/19wi/lectures/01-11/slides/arrayintlist-2.pdf