首页 > 解决方案 > 显示功能不执行,头部值不断设置为空,因此显示功能保持打印为空

问题描述

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

struct node *create(int num);
void display(void);

//链表节点创建

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

        struct node *head = NULL;
        struct node *newnode;
        struct node *temp;


int main()

{   
    int num;

    printf("enter no of nodes\n");
    scanf("%d",&num);

    for(int i = 1 ;i<=num;i++)
    {enter code here
        create(num);
    }

    display();

    return 0 ;
}

// 这会正确执行

struct node *create(int num)
{   

        newnode = (struct node *)malloc(sizeof (struct node));

        printf("enter data\n");
        scanf("%d",&newnode->data);
        newnode->next= NULL;

        if(head == 0)
        {
            head=newnode=temp;
        }

        else
        {
            temp->next=newnode;
            temp= newnode;
        }
        return head;

}


void display() 
{

            struct node *temp = head;
            if (temp == NULL)
            {
                printf("empty\n");  
            }

// create 函数正常工作,但 head 一直设置为 null

//即使链表不为空也不执行这个循环

else 
            {
                while(temp != NULL)
                    {
                         printf("%d-->",temp->data);
                        temp= temp->next;
                    }
            }


            return;
}

每次声明函数时都需要创建一个临时变量吗?为什么全局变量不起作用?如果有人可以指出确切的错误吗?提前致谢

标签: cdata-structureslinked-list

解决方案


您的代码中的所有内容都是正确的。此行导致问题head=newnode=temp;它应该如下面的片段所示。因为您没有将新创建的节点的地址分配给headtemp,而是分配了temp的初始地址。

if(head == 0)
{
     head=temp=newnode;
}

推荐阅读