Compulsived 2024-04-27 19:20 采纳率: 84.6%
浏览 3
已结题

简单链表(结构出问题了m_m)

我想创建一个链表,可以自定义长度,用来存数字并且可以打印,没报错但是卡住了


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

typedef struct Node
{
    struct Node* next;
    int date;

}List,*Listp;


void Insert_Node(Listp head,int num)
{
    int value,count=1;
    for(int i=0;i<num;i++)
    {
        printf("Input data for node %d : ",count++);
        scanf("%d",&value);
        Listp up=(Listp)malloc(sizeof(List));

        up->date=value;
        printf("1");
        up->next=head->next;
        printf("2");
        head->next=up;
    }
}

void Inite_List(Listp head)
{
    head=(Listp)malloc(sizeof(List));
    head->date=0;
    head->next=NULL;
}

 void Printf_list(Listp head)
 {
     Listp p=head->next;
     int count=1;
     printf("Data entered in the list are : \n");
     if(p!=NULL)
     {
         printf("Data : %d",count++,p->date);
         p=p->next;
     }
 }

void main()
{
    int num;
    Listp head=NULL;
    printf("Input the number of nodes : ");
    scanf("%d",&num);
    Inite_List(head);
    Insert_Node(head,num);
    Printf_list(head);
}
  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-27 19:20
    关注

    引自免费微信小程序:皆我百晓生

    在您的代码中,Inite_List 函数和 Insert_Node 函数都存在问题,导致程序运行时卡住。以下是修改后的代码:

    #include<stdio.h>
    #include<stdlib.h>
    
    typedef struct Node
    {
        struct Node* next;
        int data; // 将 "date" 改为 "data" 以避免与 C 标准库中的 "date" 冲突
    
    }List,*Listp;
    
    void Insert_Node(Listp* head, int num) // 将参数改为指针到指针,以便在函数内部更新头节点
    {
        int value;
        Listp up;
    
        for(int i = 0; i < num; i++)
        {
            printf("Input data for node %d : ", i + 1);
            scanf("%d", &value);
    
            up = (Listp)malloc(sizeof(List));
            up->data = value;
            up->next = *head; // 更新头节点指向新插入的节点
            *head = up;       // 更新头节点为新创建的节点
        }
    }
    
    void Inite_List(Listp* head) // 将参数改为指针到指针,以便在函数内部更新头节点
    {
        *head = (Listp)malloc(sizeof(List)); // 使用指针解引用操作符 *
        (*head)->data = 0;
        (*head)->next = NULL;
    }
    
    void Print_list(Listp head)
    {
        Listp p = head;
        int count = 1;
        printf("Data entered in the list are : \n");
        while(p != NULL)
        {
            printf("Node %d: Data : %d\n", count++, p->data);
            p = p->next;
        }
    }
    
    int main()
    {
        int num;
        Listp head = NULL;
        printf("Input the number of nodes : ");
        scanf("%d", &num);
    
        Inite_List(&head); // 传递指针到指针给 Inite_List 函数
        Insert_Node(&head, num); // 传递指针到指针给 Insert_Node 函数
        Print_list(head);
    
        return 0;
    }
    

    这里我对代码做了以下更改:

    1. struct Node 中的变量名 date 改为 data,因为 date 可能会与 C 标准库中的 time_t 相冲突。
    2. 修改 Insert_NodeInite_List 的参数类型,使其接受指针到指针(即 Listp*),这样可以在函数内部直接更新头节点,而不需要返回值。
    3. Print_list 函数中,使用了一个简单的 while 循环遍历整个链表,并添加了节点编号。

    这个版本的代码应该可以正常工作,不会卡住。将上述代码复制到一个新的 .c 文件中并编译运行,按照提示输入节点数量和数据,然后查看输出。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 5月5日
  • 已采纳回答 4月27日
  • 创建了问题 4月27日

悬赏问题

  • ¥30 电脑误删了手机的照片怎么恢复?
  • ¥15 (标签-python|关键词-char)
  • ¥15 python+selenium,在新增时弹出了一个输入框
  • ¥15 苹果验机结果的api接口哪里有??单次调用1毛钱及以下。
  • ¥20 学生成绩管理系统设计
  • ¥15 来一个cc穿盾脚本开发者
  • ¥15 CST2023安装报错
  • ¥15 使用diffusionbert生成文字 结果是PAD和UNK怎么办
  • ¥15 有人懂怎么做大模型的客服系统吗?卡住了卡住了
  • ¥20 firefly-rk3399上启动卡住了