consider the following defs:
Code:
typedef int Position;

/*definition for a node for linear linked list*/
typedef struct listnode{
  struct listnode *Prev;
  ListEntry *entry;
  struct listnode *Next;
}ListNode;

/*definition for a linear linked list*/
typedef struct list{
  ListNode *top;
  Position position;
}List;
I'm trying to create a doubly linked list appending each node at the head of the list. I guess it's in the same fashion that I'd enqueue a node. But getting the Prev pointer in the algorithm to work is giving me a brain cramp. Below is what I've written thus far....it does seem to work but I still don't think I'm quite doing the right thing or taking all cases into account.
If someone could please critique I would be most grateful.
Thanks in advance.

Code:
/***********************************************
  Build  a complete list
  PRE: None
  POST: Creates and initializes a List.
************************************************/
void MakeList(List *L, ListEntry *item){
  ListNode *tempNode;
  tempNode = MakeListNode(item);
  
  //case of empty list.
  //else there is already at least 1 node.
  if(!L->top){
    tempNode->Prev=NULL;
    L->top=tempNode;
  }else{
    tempNode->Next=L->top;
    L->top=tempNode;
    //tempNode->Prev=NULL;
    L->top->Next->Prev=L->top;
    L->position++;
  }    
}