给一个已经升序排列的链表(带头结点)插入一个值,使其顺序不变。应该是while那里出问题了,可以看下哪里出错了吗


   printf("\ninsert number:\n");
    scanf("%d",&number);
    Node *n=(Node*)malloc(sizeof(Node));
    n->data=number;
    pre=head;
    p=head->next;

    while(p!=NULL)
    {
        if(n->data<pre->data)
        head->next=n;
        if((n->data<=p->data)&&(n->data>=pre->data))
        {
            pre->next=n;
            n->next=p;
        }
        else 
        {
            pre=p;
            p=p->next;
        }
     } 

供参考:

void insert(Node*& head)
{
    int number;
    Node* pre, * p;
    printf("\ninsert number:\n");
    scanf("%d", &number);
    Node* n = (Node*)malloc(sizeof(Node));
    n->data = number;
    n->next = NULL;
    pre = head;
    p = head->next;
    while (p != NULL)
    {
        if (n->data <= p->data) 
        {
            n->next = pre->next;
            pre->next = n;
            break;
        }
        pre = p;
        p = p->next;
    }
}

if(n->datadata)
head->next=n;