Imprimir una lista enlazada ordenada

Acabo de editarlo. Intenté lo que dijiste pero no funcionó, así que intenté algo con el que estoy más familiarizado pero no parece funcionar correctamente. Imprime la información de forma extraña y luego se bloquea. Por ejemplo: cuando imputo 9-8-7-6-5-4-3-2-1 y luego 0 para imprimir, se imprime de nuevo a mí 0-0-0-9- 1-2-3-4-5-6-7-8 y luego se estrella? cuando imputo 1-2-3-4-5-6-7-8-9 luego 0 para imprimir, me imprime de nuevo 0-0-0-1-2-3-4-5-6-7- 8-9 y luego se estrella.

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

struct listNode{
  int data;    //ordered field
  struct listNode *next;
};

//prototypes
void insertNode(struct listNode *Head, int x);
int printList(struct listNode *Head);
int freeList(struct listNode *Head, int x);

//main
int main(){
     struct listNode Head = {0, NULL};
     int x = 1;
     int ret = 0;
     printf("This program will create an odered linked list of numbers greater"
     " than 0 until the user inputs 0 or a negative number.\n");
     while (x > 0){
           printf("Please input a value to store into the list.\n");
           scanf("%d", &x);
           insertNode(&Head, x);
     }
     ret = printList(&Head);
     }
void insertNode(struct listNode * Head, int x){
     struct listNode *newNode, *current;
     newNode = malloc(sizeof(struct listNode));
     newNode->data = x;
     newNode->next = NULL;
     current = Head;
     while (current->next != NULL && current->data < x) 
     {
        current = current->next;
        }

        if(current->next == NULL){
             current->next = newNode;
        }
        else{
             newNode->next = current->next;
             current->next = newNode;
        }
}
int printList(struct listNode * Head){
    struct listNode *current = Head;
    while (Head != NULL){
          printf("%d \n", *current);
          current = current->next;
    }
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta