Hello,

I have this code here that I would like to use to construct two linked lists. one for students and one for courses..

I had it working for just students, that is, before I tried to pass the head and end of the different lists to the init function. Now that I have two different lists, notice the head and end pointers for courses and students, I cannot get this to work. hints?

Code:
 
#include <stdio.h>
#include <alloc.h>
#include <stdlib.h>
#include <conio.h>
#include <ctype.h>
#include <string.h>
 
struct node * initnode( char *, int );
void printnode( struct node * );
void printlist( struct node * );
 
struct node {
   char name[20];
   int  id;
   struct node *next;
   // struct course *myCourse;
};

//struct course {
//   char courseID[7];
//   struct course *next;
//};


struct node *studentHead = (struct node *) NULL;
struct node *studentEnd = (struct node *) NULL;

struct node *courseHead = (struct node *) NULL;
struct node *courseEnd = (struct node *) NULL;

 
struct node * initnode( char *name, int id )
{
   printf("START INIT NODE......");
   struct node *ptr;
   ptr = (struct node *) calloc( 1, sizeof(struct node ) );
   if( ptr == NULL )    {                   /* error allocating node?      */
   printf("INIT NODE ERROR\n");
       return (struct node *) NULL;        /* then return NULL, else      */
       }
   else {                                  /* allocated node successfully */
       strcpy( ptr->name, name );          /* fill in name details        */
       ptr->id = id;                       /* copy id details             */
       printf("INIT NODE COMPLETE\n");
       return ptr;                         /* return pointer to new node  */
   }

}

 

void printlist( struct node *ptr )
{
   printf("printing list...");
   while( ptr != NULL )           /* continue whilst there are nodes left */
   {
      printnode( ptr );           /* print out the current node           */
      ptr = ptr->next;            /* goto the next node in the list       */
   }
}


void printnode( struct node *ptr )
{

   printf("\nName ->%s\n", ptr->name );
   printf("ID   ->%d\n", ptr->id );
}


void insertnode( struct node *newNode, struct node *phead, struct node *pend )
{
   struct node *temp, *prev;                /* similar to deletenode      */

   if( phead == NULL ) {                     /* if an empty list,          */
       printf("set head and end... ");
       phead = newNode;                          /* set 'head' to it           */
       pend = newNode;
       phead->next = NULL;                   /* set end of list to NULL    */
       printf("done.\n");
       return;                              /* and finish                 */
   }

   temp = phead;                             /* start at beginning of list */
                      /* whilst currentname < newname to be inserted then */
   while( strcmp( temp->name, newNode->name) < 0 ) {
          temp = temp->next;                /* goto the next node in list */
          if( temp == NULL )                /* dont go past end of list   */
              break;
   }
   
   if( temp == phead ) {
      newNode->next = phead;             /* link next field to original list   */
      phead = newNode;                   /* head adjusted to new node          */
   }
   else {     /* okay, so its not the first node, a different approach    */
      prev = phead;   /* start of the list, will cycle to node before temp */
      while( prev->next != temp ) {
          prev = prev->next;
      }
      prev->next = newNode;             /* insert node between prev and next  */
      newNode->next = temp;
      if( pend == prev )             /* if the new node is inserted at the */
         pend = newNode;                 /* end of the list the adjust 'end'   */
   }
}



main()
{
   char name[20];
   char cname[10];
   int id;
   struct node *sPtr;
   struct node *crsPtr;

   
   printf("Enter student name ");
   scanf("%s", name );
   printf("Enter in id -- ");
   scanf("%d", &id );
   sPtr = initnode( name, id );
   insertnode( sPtr, studentHead, studentEnd);

   printf("Enter course name ");
   scanf("%s", cname );
   sPtr = initnode( cname, -1 );
   insertnode( sPtr, courseHead, courseEnd);   
   
   // now print
   printlist(studentHead);
   printlist(courseHead);
   
   system("pause");
   
}