what to know if im on the right track for this ordered linked list ias i get each record i want to insert it into the linked list in order.

Code:
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>

#define Nlen    26

typedef struct person_t {
   char FName[Nlen];
   char LName[Nlen];
   char Sex;
   char Grade;
} PERSON;

void amend_file( char file[], PERSON *STU );
void show_file( char file[], PERSON *STU );
struct listNode
{
    char data;
    struct listNode *priorPtr;
    struct listNode *nextPtr;

}ListNode;

struct listNode  *start = NULL;         
struct listNode  *last = NULL;  

int main (void)
{
   PERSON *STU;
   int Ans;
      char file[] = "data.txt";
    int Records [100];
    
    
  do
   {
      printf("\n\n"
             "1. Enter new record\n"
             "2. Display List\n"
             "3. Quit\n\n");
      printf("Prompt: ");
      fflush(stdout);
      if ( scanf("%d", &Ans) == 1 ) /* get answer */
      {
         STU = (PERSON*) malloc (sizeof (PERSON));
         if (STU == NULL)
         {
            perror("PERSON");
            exit(EXIT_FAILURE);
         }
         switch(Ans)
         {
            case 1:
               amend_file(file, STU);
               HEAD->LName = data;
                  data = (struct person_t  *) malloc(sizeof(person_t));
        if(!data)
            return -1;
        data->data =LNAME ;
        insert(data, &start, &last);
    }
    tempnode = start;
   
     fprintf(fin, "%s %s %c %c\n", HEAD->LName, HEAD->FName, HEAD->Sex, HEAD->Grade);
     fflush(fin);
   fclose(fin);
               break;
            case 2:
               show_file(file, STU);
               break;
            case 3: default:
               Ans = 3;
               break;
         }
      } /* /get answer */
   }
    while ( Ans != 3 );
    
      fflush(stdout);
   free(STU);
   return EXIT_SUCCESS;
}
/*
* amend_file: Enter stuff into the working file.
* Very much a bare bones function so far; work on making this better
* Perhaps make it work with a linked list, as your struct suggests?
*/
void amend_file( char file[], PERSON *HEAD )
{
   assert(HEAD != NULL);
   FILE *fin = fopen(file, "a");
   if ( fin == NULL )
   {
      perror(file);
      exit(EXIT_FAILURE);
   }
   printf("Enter new record: ");
   printf ("\nEnter students First name ( up to %d letters):", Nlen);
   printf ("\nEnter students  Last name  ( up to %d letters):", Nlen);
   printf ("\nPlease enter Sex");
   printf ("\nPlease enter Grade\n");
   
   scanf("%s %s %c %c", &HEAD->FName, &HEAD->LName, &HEAD->Sex,
      &HEAD->Grade);

}
/*
* show_file: Reads the working file.
* Bare bones again...
*/
void show_file ( char file[], PERSON *HEAD )
{
  assert(HEAD != NULL);
  int b = 1;
  FILE *fout = fopen(file, "r");
    
  if (file == NULL)
  {
    perror(file);
    exit(EXIT_FAILURE);
  }
   while (fscanf(fout, "%s %s %c %c", &HEAD->FName, &HEAD->LName, &HEAD->Sex,
     &HEAD->Grade) == 4)
  {
    printf("Record %d: %s %s %c %c\n", b, HEAD->FName, HEAD->LName,
       HEAD->Sex, HEAD->Grade);
    b++;
  }
  fclose(fout);
}


//Ordered Linked list
//*******************************************************************  
void insert( struct listNode   *newnode,  /* new node */
                struct listNode   **start, /* first node */
                struct listNode   **last /* last node */
                )
{
    struct listNode  *oldptr, *ptr;
    if(*last == NULL) /* first node in linklist */
    {
        newnode->nextPtr = NULL;
        newnode->priorPtr = NULL;
        *last = newnode;
        *start = newnode;
        return;
    }
    ptr = *start; /* start at top of linklist */
    oldptr = NULL;
    while(ptr)
    {
        if(ptr->data < newnode->data )
        {
            oldptr = ptr;
            ptr = ptr->nextPtr;
        }
        else
        {
            if(ptr->priorPtr)
            {
                ptr->priorPtr->nextPtr = newnode;
                newnode->nextPtr = ptr;
                newnode->priorPtr = ptr->priorPtr;
                ptr->priorPtr = newnode;
                return;
            }
            newnode->nextPtr = ptr; /* newnode first node */
            newnode->priorPtr = NULL;
            ptr->priorPtr = newnode;
            *start = newnode;
            return;
        }
    }
    oldptr->nextPtr = newnode;
    newnode->nextPtr = NULL;
    newnode->priorPtr = oldptr;
    *last = newnode;
}