Linked Lists and Dynamic Memory Allocation

The program will take in a filename as a command line
argument. When opening the file, the program should load all entries in to a linked
list for which each node contains a pointer to a vehicle struct. The program will
then populate a list of makes based on the data and present it to the user.
The user should be able to select one of the possible makes via keyboard input (see
example output). The program will then create a new linked list and copy the data
pointers of the original list into the temporary linked list which only holds entries
based on the user’s selection.
Data Format
int year
char *make
char *model
char *color
char *license_plate
Other Requirements
The CSV file must be input as a command line argument when running the
program.
Nodes must be allocated for each vehicle read in the CSV file.
Allocated memory must be freed before the program terminates.
When building a new linked list of the selected make, use the allocated data
that was already created for the original list.
Any function declarations, struct declarations, and library includes should be
in a corresponding header file (with header guard).
Save your files as problem2.h and problem2.c.
Example Run
1. Alfa Romeo
2. Buick
3. Chevrolet
4. Ford
5. Honda
Select Make: 3
2001 Chevrolet Camaro Z28 (White) LIC#123313
2021 Chevrolet Corvette (Black) LIC#453FD3