How is the directory implementation done using a linear list?
A directory is a collection of files, some of which could be directories. You can store the list of files forming a directory as a linear list. This is somewhat similar to the adjacency list representation of a graph (imagine that the graph were a tree).

Each node in the list contains some sort of information regarding the file, such as the name, size and contents. The contents themselves are not stored at the list, but somewhere else in the filesystem. Each node just contains a pointer to the data, which is what is meant by data blocks. The exact way in which this is implemented depends on the file system – the main issue here is that the file isn't stored contiguously.