Buongiorno a tutti!
Ho appena iniziato a studiare le strutture di dati dal libro Deitel & Deitel. C'è un esercizio svolto che ho provato a rifare e continua a darmi 2 errori.
L'esercizio chiede di inserire e rimuovere lettere in ordine alfabetico in una lista tramite un menù. Grazie a tutti! Ecco il codice:

codice:
#include <stdio.h>
#include <stdlib.h>

struct listNode {
       char data;
       struct listNode *nextPtr;
       };

typedef struct listNode LISTNODE;
typedef LISTNODE *LISTNODEPTR;

void instructions( void );
void insert( LISTNODEPTR *sPtr, char value );
void printList( LISTNODEPTR currentPtr );
int isEmpty( LISTNODEPTR sPtr );
char deleteC( LISTNODEPTR *sPtr, char value );


main()
{
      int choice;
      char item;
      LISTNODEPTR startPtr = NULL;
      
      instructions();
      printf("?  ");
      scanf("%d", &choice);
      
      while ( choice != 3 )
      {
            switch (choice) {
                   case 1:
                        printf("Enter a character: ");
                        scanf("%c", &item);
                        insert(&startPtr, item);
                        printList(startPtr);
                        break;
                   case 2:
                        if (!isEmpty(startPtr))
                        {
                            printf("Enter character to be deleted: ");
                            scanf("%c", &item);
                            
                            if (deleteC(&startPtr, item))
                            {
                                printf("%c deleted.\n", item);
                                printList(startPtr);
                            }
                            else
                                printf("%c not found.\n\n", item);
                        }
                        else
                            printf("List is empty.\n");
                        
                        break;
                   default:
                           printf("Invalid choice.\n\n");
                           instructions();
                           break;
            }
            
            printf("?  ");
            scanf("%d", &choice);
      }
      
      printf("End of run.\n");
      system("pause");
}



void instructions( void )
{
     printf("Enter your choice:\n"
            "1 to insert an element into the list.\n"
            "2 to delete an element from the list.\n"
            "3 to end.\n\n");
}

void insert ( LISTNODEPTR *sPtr, char value )
{
     LISTNODEPTR newPtr, previousPtr, currentPtr;
     
     newPtr = malloc(sizeof(LISTNODEPTR));
     
     if ( newPtr != NULL )
     {
          newPtr->data = value;
          newPtr->nextPtr = NULL;
          
          previousPtr = NULL;
          currentPtr = *sPtr;
          
          while ( currentPtr != NULL && value > currentPtr->data )
          {
                previousPtr = currentPtr;
                currentPtr = currentPtr->nextPtr;
          }
          
          if ( previousPtr == NULL )
          {
               newPtr->nextPtr = *sPtr;
               *sPtr = newPtr;
          }
          else
          {
              previousPtr->nextPtr = newPtr;
              newPtr->nextPtr = currentPtr;
          }
     }
     else
         printf("%c not inserted. No memory available.\n", value);
}

void printList( LISTNODEPTR currentPtr )
{
     if ( currentPtr == NULL )
        printf("The list is empty.\n");
     else
     {
         printf("The list is:\n");
         
         while ( currentPtr != NULL )
         {
               printf("%c --> ", currentPtr->data);
               currentPtr = currentPtr->nextPtr;
         }
         
         printf("NULL\n\n");
     }
}

int isEmpty( LISTNODEPTR sPtr )
{
    return sPtr == NULL;
}

char deleteC( LISTNODEPTR *sPtr, char value )
{
     LISTNODEPTR previousPtr, currentPtr, tempPtr;
     
     if ( value == (*sPtr)->data )
     {
          tempPtr = *sPtr;
          sPtr = (*sPtr)->nextPtr;
          free(tempPtr);
          return value;
     }
     else
     {
         previousPtr = *sPtr;
         currentPtr = (*sPtr)->nextPtr;
         
         while ( currentPtr != NULL && currentPtr->data != value )
         {
               previousPtr = currentPtr;
               currentPtr = currentPtr->nextPtr;
         }
         
         if ( currentPtr != NULL ) 
         {
              tempPtr = currentPtr;
              previousPtr->nextPtr = currentPtr->nextPtr;
              free(tempPtr);
              return value;
         }
     }
     
     return '\0';
}