https://medium.com/@caopengau/linked-list-and-bidirectional-linked-list-in-c-with-struct-and-pointer-144cfab6fb3