Imprimir uma lista vinculada ordenada

Apenas fiz algumas edições nele, eu tentei o que você disse, mas não funcionou, então eu tentei algo que eu sou um pouco mais familiarizado, mas não parece funcionar corretamente. Ele imprime a informação estranhamente, em seguida, trava .. Por exemplo: quando eu imput 9-8-7-6-5-4-3-2-1, em seguida, 0 para imprimir, ele imprime de volta para mim 0-0-0-9- 1-2-3-4-5-6-7-8 e depois falha? quando eu imputo 1-2-3-4-5-6-7-8-9, em seguida, 0 para imprimir, ele imprime de volta para mim 0-0-0-1-2-3-4-5-6-7- 8-9 e depois falha.

#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;
    }
}

questionAnswers(2)

yourAnswerToTheQuestion