LateNoon 2022-09-21 20:11 采纳率: 63.6%
浏览 34
已结题

C语言链表在函数内给head赋值问题

想要简单的实现以下链表,然后这次尝试在函数内完成head的建立,结果因为同级指针的问题,不能修改主函数的head,请把这段完善


#include <stdio.h>
#include <stdlib.h>
typedef struct NODE{
    int date;
    struct Node *next;
}Node;
Node* create(int a){
    Node *node = (Node*)malloc(sizeof (Node));
    node->date = a;
    node->next = NULL;
    return node;
}
void insert(Node* head){
    int a;
    scanf("%d",&a);
    Node* new = create(a);
    if(head==NULL){
        Node **head = &head;
        *head = new;
    } else{
        Node* p = head;
        while (p->next){
            p=p->next;
        }
        p->next = new;
    }
}
void print(Node*head)
{
    Node* pMove=head;
    while(pMove)
    {
        printf("%d ",pMove->date);
        pMove=pMove->next;
    }

}
void delete(Node*head,int count){
    Node* pMove=head;
    for(int i=0;i<count-1;i++){
        pMove = pMove->next;
    }
    if(pMove+2!=NULL){
        pMove->next = (pMove+2);
    } else{
        pMove->next=NULL;
    }
}
int main() {
    Node *head  = NULL;
    for(int i = 0 ; i<=1;i++){
        insert(head);
    }
    print(head);
}

请求修改位置:
insert函数下:

if(head==NULL){
        Node **head = &head;
        *head = new;
    }

为了方便验证,主函数就只用了输入两次.

  • 写回答

1条回答 默认 最新

  • qzjhjxj 2022-09-21 21:45
    关注

    修改处见注释,供参考:

    #include <stdio.h>
    #include <stdlib.h>
    typedef struct NODE{
        int date;
        struct NODE *next; //struct Node 修改
    }Node;
    Node* create(int a){
        Node *node = (Node*)malloc(sizeof (Node));
        node->date = a;
        node->next = NULL;
        return node;
    }
    void insert(Node** head){ //void insert(Node* head) 修改
        int a;
        scanf("%d",&a);
        Node* New = create(a); //new 修改
        if((*head) == NULL){   //f(head==NULL)  修改
            //Node **head = &head;          修改
            (*head) = New;       //new;     修改
        } else{
            Node* p = (*head);  //Node* p = head; 修改
            while (p->next){
                p=p->next;
            }
            p->next = New;     //new 修改
        }
    }
    void print(Node* head)
    {
        Node* pMove=head;
        while(pMove)
        {
            printf("%d ",pMove->date);
            pMove=pMove->next;
        }
    
    }
    void Delete(Node* head,int count){ //delete 修改
        Node* pMove=head;
        for(int i=0;i<count-1;i++){
            pMove = pMove->next;
        }
        if(pMove+2!=NULL){        //pMove+2是什么?
            pMove->next = (pMove+2);//链表不是连续空间,pMove+2是想干啥?
        } else{
            pMove->next=NULL;
        }
    }
    int main() {
        Node *head  = NULL;
        for(int i = 0 ; i <= 1;i++){
            insert(&head);  //insert(head);
        }
        print(head);
        system("pause");
        return 0;
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月2日
  • 已采纳回答 9月24日
  • 创建了问题 9月21日

悬赏问题

  • ¥60 优博讯DT50高通安卓11系统刷完机自动进去fastboot模式
  • ¥15 minist数字识别
  • ¥15 在安装gym库的pygame时遇到问题,不知道如何解决
  • ¥20 uniapp中的webview 使用的是本地的vue页面,在模拟器上显示无法打开
  • ¥15 网上下载的3DMAX模型,不显示贴图怎么办
  • ¥15 关于#stm32#的问题:寻找一块开发版,作为智能化割草机的控制模块和树莓派主板相连,要求:最低可控制 3 个电机(两个驱动电机,1 个割草电机),其次可以与树莓派主板相连电机照片如下:
  • ¥15 Mac(标签-IDE|关键词-File) idea
  • ¥15 潜在扩散模型的Unet特征提取
  • ¥15 iscsi服务无法访问,如何解决?
  • ¥15 感应式传感器制作的感应式讯响器