c中的链表returns负数而不是添加节点

Linked list in c returns negative number instead of adding node

有人可以向我解释为什么这段代码 returns 是一个随机负数,而不是按应有的方式添加节点吗?如果删除对 addnode 的调用,则 main 函数将正常工作,因此问题出在 addnode 函数上。我不认为是 malloc 有问题,而且我一辈子也弄不明白是什么。请帮忙,我是 c 的业余爱好者,我对指针的工作原理有一个模糊的理解,所以我猜我的指针有问题。这是完整的代码:

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

struct node
{
    int data;
    struct node *next;
};

int addNode(struct node **head, int value);
void printList(struct node **head);

int main()
{
    int value;
    
    struct node *head;
    head=NULL;
    //int isempty(struct node *head);
    for(int i=0;i<10;i++)
    {
    printf("\nInsert node value :");
    scanf("%d",&value);
    addNode(&head,value);
    }
    printList(&head);
     return 0;
}
int addNode(struct node **head,int value)
    {
    struct node *newnode;
    newnode=(struct node *) malloc(sizeof(struct node));
    //if(newnode==NULL)
    if(!newnode)
    {
    printf("Memory allocation error \n"); 
    exit(0);
    }
    
    if(*head=NULL)
    {
        newnode->data=value;
        newnode->next=NULL;
        *head=newnode;
        return 1;
    }
    else
    {
        
        struct node *current;
        *current = **head;
        while(current != NULL)
        {
            if(value<=(current->data)){
                //περίπτωση 1ου κόμβου σε μη κενή λίστα
                if(current==*head){
                    newnode->data=value;
                    newnode->next=*head;
                    *head=newnode;
                    return 1;
                }
                //περίπτωση ενδιάμεσου κόμβου
                newnode->data=value;
                return 1;
            }
            current = current->next;
        }

    }
}
/*int isempty(struct node *head){
    return (head==NULL);
}*/

void printList(struct node **head) {
   struct node *ptr = *head;
   printf("\n[ ");
    
   //start from the beginning
   while(ptr != NULL) {
      printf("(%d) ",ptr->data);
      ptr = ptr->next;
   }
   printf(" ]");
   return;
}

对于初学者来说,您在 addNode

中有一个赋值而不是比较

if(*head=NULL) should be if(*head==NULL)

除此之外,我认为您正在尝试以排序的方式维护元素?但是无论如何,您对指针的操作比您需要的要多一些。