I copied your code into a blank project and compiled... no errors... that's good. I ran it and the program immediately crashed... not good.

I put in some debug statements sprinkled here and there in the main and read_from_file functions. That would be a handy skill for you to develop by the way. I discovered that the fclose on a non-existant file (first time program is run there is no file) was causing the crash on my system. So I added the check mentioned below towards the very end of the read_from_file function so we only call fclose if we read in some data.

Code:
airline * read_from_file()
{
    FILE *fp;
    airline *start, *curr, *temp;
    int length = 0;
    int airline_count= 0;
    int flight_count = 0;
    int passenger_count = 0;

    // Initialize pointers
    start = curr = NULL;

    // Open file for reading
    fp = fopen("airline.txt","rb");

    // Not necessary
    while(!feof(fp))
    {
        // Read in number of airlines stored in file
        if( fp == NULL)
            airline_count = 0;
        else
            fread(&airline_count,sizeof(int),1,fp);

        // Loop through "airline_count" airlines
        for( ; airline_count > 0; --airline_count )
        {
            // allocate room for a single airline structure and flight link to NULL
            temp = (airline *)malloc(sizeof(airline));
            temp->next = NULL;
            temp->node1 = NULL;

            // read airline name length
            fread(&length,sizeof(int),1,fp);

            //allocate sufficent memory for the airline name
            temp->airlinename = (char *)malloc(length+1);

            // read in airline's name and NULL terminate
            fread(temp->airlinename,length,1,fp);
            temp->airlinename[length] = 0;

            // Add current airline to end of growing list of airlines
            if( start == NULL ) 
            {
                start = curr = temp;
            }
            else
            {
                curr->next = temp;
                curr = curr->next;
            }

            // Read in number of flights stored for the airline in file
            fread(&flight_count,sizeof(int),1,fp);

            // Loop through "flight_count" flight
            for( ; flight_count > 0; --flight_count )
            {
                // allocate room for a single flight structure and set passenger link to NULL
                curr->node1 = (flight *)malloc(sizeof(flight));
                curr->node1->next = NULL;
                curr->node1->node2 = NULL;

                // read flight name length
                fread(&length,sizeof(int),1,fp);

                //allocate sufficent memory for the flight name
                curr->node1->flightname = (char *)malloc(length+1);

                // read in flight name and NULL terminate
                fread(curr->node1->flightname,length,1,fp);
                curr->node1->flightname[length] = 0;

                // read departure location length
                fread(&length,sizeof(int),1,fp);

                //allocate sufficent memory for the departure location
                curr->node1->departure_location = (char *)malloc(length+1);

                // read in departure location and NULL terminate
                fread(curr->node1->departure_location,length,1,fp);
                curr->node1->departure_location[length] = 0;

                // read arrival location length
                fread(&length,sizeof(int),1,fp);

                //allocate sufficent memory for the arrival location
                curr->node1->arrival_location = (char *)malloc(length+1);

                // read in arrival location and NULL terminate
                fread(curr->node1->arrival_location,length,1,fp);
                curr->node1->arrival_location[length] = 0;

                // read take off time length
                fread(&length,sizeof(int),1,fp);

                //allocate sufficent memory for the take off time
                curr->node1->take_off_time = (char *)malloc(length+1);

                // read in take off time and NULL terminate
                fread(curr->node1->take_off_time,length,1,fp);
                curr->node1->take_off_time[length] = 0;

                // Add current flight to end of growing list of flights
                if( start->node1 == NULL ) 
                {
                    start->node1 = curr->node1 = temp->node1;
                }
                else
                {
                    curr->node1->next = temp->node1;
                    curr->node1 = curr->node1->next;
                }

			
                // Read in number of passengers stored for that file
                fread(&passenger_count,sizeof(int),1,fp);

                // Loop through "passenger_count" passengers for this flight
                for( ; passenger_count > 0; --passenger_count )
                {
                    // allocate room for a single passenger structure
                    curr->node1->node2 = (passenger *)malloc(sizeof(passenger));
                    curr->node1->node2->next = NULL;

                    // read passenger name length
                    fread(&length,sizeof(int),1,fp);

                    //allocate sufficent memory for the passenger name
                    curr->node1->node2->name = (char *)malloc(length+1);

                    // read in passenger name and NULL terminate
                    fread(curr->node1->node2->name,length,1,fp);
                    curr->node1->node2->name[length] = 0;


                    // Add current passenger to end of growing list of
                    // passengers for this flight
                    if( start->node1->node2 == NULL ) 
                    {
                        start->node1->node2 = curr->node1->node2 = temp->node1->node2;
                    }
                    else
                    {
                        curr->node1->node2->next = temp->node1->node2;
                        curr->node1->node2 = curr->node1->node2->next;
                    }
                }
            }
        }
    }  // Not necessary

    // Should only have to close file if there was a file to read
    if( airline_count > 0 ) fclose(fp);
    return start;
}
That isn't the only problem of course. Once I made the above changes, I was able to add airlines, delete airlines and exit the program. I was then able to successfully restart the program and display the list of airlines that had been saved and read from the file. At this point I hadn't entered any flight or passenger information for any of the airlines. I added a flight to one of the airlines I exited the program and started the program again. Now when I displayed the list of airlines, the airline list was messed up. Attempting to exit the program at this point also seemed to be a little problematic. So, there seems to be an issue with either saving or reading from the file once you get to the point where you start reading/writing flight information.

Another problem is all your menu functions seem to recursively calling themselves. This could eventually come back to bite you and should be fixed. As an example:

Code:
// Menu Function which is handles the airlinelist
airline* airline_menu(airline *start)
{                                                                      
    int choice;
    
    printf("Welcome to the Main Menu\n");
    printf("Please enter your choice from the menu shown below\n");
    printf("1: Add a new airline to this airport\n");
    printf("2: Delete an airline from the airport\n");
    printf("3: Display the Airlines List at this Airport\n");
    printf("4: Enter Flight menu for an airline\n");
    printf("5: Exit the program\n");
    scanf ("%d", &choice);
    switch(choice)
    {
        case 1: 
        { 
            start1 = create_airline_node(start1);
        } break;
        case 2:
        {  
            start1 = delete_airline_node(start1);
        } break;
        case 3:
        {
            print_airline_list(start1);
        } break;
        case 4:
        {
            start1 = enter_flight_menu(start1);
        } break;
        case 5:
        {
            write_to_file(start1);
            exit(1);
        } break;
        default:
        {
            start1 = airline_menu(start1);
        } break;
    }
    printf("\n");
    start1 = airline_menu(start1);
    return start1;
}
This function should be rewritten to look something like:

Code:
airline* airline_menu(airline *start)
{                                                                      
    int choice;
    
    do
    {
        printf("Welcome to the Main Menu\n");
        printf("Please enter your choice from the menu shown below\n");
        printf("1: Add a new airline to this airport\n");
        printf("2: Delete an airline from the airport\n");
        printf("3: Display the Airlines List at this Airport\n");
        printf("4: Enter Flight menu for an airline\n");
        printf("5: Exit the program\n");
        scanf ("%d", &choice);
        switch(choice)
        {
        case 1: 
            start1 = create_airline_node(start1);
            break;
        case 2:
            start1 = delete_airline_node(start1);
            break;
        case 3:
            print_airline_list(start1);
            break;
        case 4:
            start1 = enter_flight_menu(start1);
            break;
        case 5:
            write_to_file(start1);
            break;
        default:
            break;
        }
        printf("\n");
    } while( choice != 5 );
    return start1;
}
There, no more recursion. However, I must point out that you are passing in a start pointer but everywhere in the code above you are using the global start1 pointer.

It would also seem that you need to have a function that cleans up all the allocated memory for your linked lists. Something that gets called before main exits.

Make the changes I made above and try to get a little bit further. Put in temporary printf statements to help debug your code. If you still have problems, post you code again and explain what part of your code you think isn't working correctly.