Changes introduced into reading/writing files.

1. Some assertions excluded;
2. Changed the reading file logic;
3. Tested if a file already exists before overwriting it.
Modified the read() function.

1. Removed an assert;
2. Rewritten the file-reading logic.
Minor corrections and changes.

1. Completed TODOs;
2. Limited to 3 levels of identation (separated into helper functions);
3. Changed: address_of_last() now returns NULL if head is NULL.
Added TODOs.