1

この問題に直面しています。リンクされたリスト (グローバルとして定義したもの) を関数を介して (ノードを挿入するために) 渡すと、ポインターがメイン関数に戻ると常に NULL 値が返されます。ただし、定義されたグローバルにノードを追加している場合、正常に動作しており、これも期待どおりです。このコードが機能せず、 *list が常に NULL を指している理由を教えてください。

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

    typedef struct node node;
    static node *list=NULL;

boolean add_node(node *list, int n, int val)
{

    node *temp=NULL;
    temp = (node *)malloc(sizeof(node));
    temp->val = val;
    temp->next = NULL;

    if((list==NULL) && (n!=0))
    {
        printf("link list is NULL and addition at non zero index !");
        return (FALSE);
    }

    if(list==NULL)
    {
       printf("list is NULL ");
       list= temp;
    }
    else if(n==0)
    {
       temp-> next = list;
       list=temp;
    }
    else
    {
        node *temp2;
        temp2 = list;
        int count =0;
        while(count++ != (n-1))
        {
          temp2 = temp2->next;
          if(temp2==NULL)
          {
            printf("nth index %d is more then the length of link list %d ",n,count);
            return (FALSE);
          }
        }

        node *temp3;
        temp3 = temp2->next;
        temp2-> next = temp;
        temp->next = temp3;
    }

    printf("List after node insertion \n");
    print_link_list(list);
    return (TRUE);
}

main()
{
     c= getchar();
     switch(c)
        {
            case 'I':
            {
                printf("Insert a index and value  \n");
                int index,value;
                scanf_s("%d",&index);
                scanf_s("%d",&value);
                if(add_node(list,index,value)==FALSE)
                {
                    printf("Couldn't add the node \n");
                }

                if(list==NULL)
                {
                    printf("\n After Insert op.,list is NULL, add %x",list);
                }
                else
                {
                    printf("After Inset op., list is not Null, add %x",list);
                }
            }
            break;
            case 'D':

....
}
4

2 に答える 2

0

グローバル変数listは変更されず、パラメーターのみが変更されますlist

おそらく、そのパラメーターをポインターへのポインターにして、パラメーターをtoではなくthroughに代入する必要があります。

于 2013-10-21T18:26:16.423 に答える