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

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日

悬赏问题

  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序
  • ¥15 onvif+openssl,vs2022编译openssl64
  • ¥15 iOS 自定义输入法-第三方输入法
  • ¥15 很想要一个很好的答案或提示