Hey guys. this is my first post. i have to write a program that takes the input of two integers and then subtracts the second from the first and displays this difference. The catch is that the integers can be of any size. and btw...this program has to be written in C. I'm using linked lists to do this problem, and have assigned each digit to a node. The digits are being stored in backwards order. I'm pasting my code here to show what i have accomplished so far. Basically, the only thing i'm having problems with is subtracting the two integers after storing them. Any ideas or help will be appreciated.

Code:
#include <stdio.h>

typedef struct node
{
  int digit;
  struct node *next;
} NODE;

typedef NODE *PNODE;

PNODE create_node(int);
PNODE insert_node(PNODE, PNODE);
void display_number(PNODE);
void free_list(PNODE);

int main(void)
{
  PNODE pFirst = NULL, pSecond = NULL, /*pSum = NULL*/ pTemp;
  char c;

  /* Read input from user. */
  printf("Enter first positive integer: ");
  while ((c = getchar()) != '\n') {
    pTemp = create_node(c - '0');
    pFirst = insert_node(pFirst, pTemp);
  }
  printf("Enter second positive integer: ");
  while ((c = getchar()) != '\n') {
    pTemp = create_node(c - '0');
    pSecond = insert_node(pSecond, pTemp);
  }

  /* Display Numbers */
  printf("Number1 = ");
  display_number(pFirst);
  printf("\n");
  
  printf("Number2 = ");
  display_number(pSecond);
  printf("\n");
  
  /* Free memory. */
  free_list(pFirst);
  free_list(pSecond);

  return 0;
}

/* Creates a node for given data and return pointer to it. */
PNODE create_node(int x)
{
  PNODE pTemp;

  pTemp = (PNODE) malloc (sizeof(NODE));
  if (pTemp == NULL)
    {
      printf("Out of memory, could not store number!\n");
      exit(1);
    }
  else
    {
      pTemp->digit = x;
      pTemp->next = NULL;
    }

  return pTemp;
}

/* Inserts node pNew into pList at the start of the list. */
PNODE insert_node(PNODE pList, PNODE pNew)
{
  pNew->next = pList;
  return pNew;
}

/* Display the number represented by the list. */
void display_number(PNODE pList)
{
  while (pList != NULL)
    {
      putchar('0' + pList->digit);
      pList = pList->next;
    }

  return;
}

/* Free memory associated with list. */
void free_list(PNODE pList)
{
  PNODE pTemp;

  while (pList != NULL)
    {
      pTemp = pList->next;
      free(pList);
      pList = pTemp;
    }

  return;
}