风骚的小胖子。 发表于 2018-10-7 20:07:13

单链表头插法出问题啦!!

不知道哪里出问题了!!

风骚的小胖子。 发表于 2018-10-7 20:07:51

本帖最后由 风骚的小胖子。 于 2018-10-7 20:08 编辑

输出结果是这样!只能输入《带你学C带你飞》然后回车就出现这个

claws0n 发表于 2018-10-7 20:23:48

void addBook(struct Book **head)
{
        struct Book *p;
        p = (struct Book *)malloc(sizeof(struct Book));
        if (p == NULL)
        {
                printf("Memory allocation failed");
                exit(1);
        }

    getInput(p);

        if (*head != NULL)
        {
                p->next = (*head)->next;
                (*head)->next = p;
        }
        else
        {
                *head = p;
                p->next = NULL;
        }
}

风骚的小胖子。 发表于 2018-10-7 20:46:41

claws0n 发表于 2018-10-7 20:23


对了谢谢大佬。但是p->next=(*head)->next;
                           (*head)->next=p;
什么意思来的理解不了。

claws0n 发表于 2018-10-7 20:48:25

风骚的小胖子。 发表于 2018-10-7 20:46
对了谢谢大佬。但是p->next=(*head)->next;
                           (*head)->next=p;
什么意思 ...

void addBook(struct Book **head)
head 是二级指针,*head 降级变回一级指针,才是指向结构体的指针

风骚的小胖子。 发表于 2018-10-7 20:51:44

claws0n 发表于 2018-10-7 20:23


(*head)->next=p;
head这个结构体指针内部指针指向p指针能理解。按道理这个P内部指针应该指向NULL指针才组成单链表啊。但是上一句这个p->next=(*head)->next;这个又是这个p结构体内部指针又指向头指针的内部指针是什么意思

风骚的小胖子。 发表于 2018-10-7 20:55:52

claws0n 发表于 2018-10-7 20:48
void addBook(struct Book **head)
head 是二级指针,*head 降级变回一级指针,才是指向结构体的指针

这个懂 但是为什么是动态申请的这个结构体的内部指针指向这个头指针的地址,按概念不是反了吗?是头指针指向结构体地址然后结构体内部指针又指向结构体地址。。如此类推 最后结构体内部指针指向NULL吗
然后又是这个头指针的内部指针指向这个P地址

claws0n 发表于 2018-10-7 21:29:48

风骚的小胖子。 发表于 2018-10-7 20:55
这个懂 但是为什么是动态申请的这个结构体的内部指针指向这个头指针的地址,按概念不是反了吗?是头指针 ...

head 不是结构体指针。你回头看 swap(int *x, int *y); swap(&a, &b); 原型里面,x 和 y 都是指针。
head 是指向【结构体指针】的指针。你得先降级,变回结构体指针,数据类型跟 p 一样,才可以赋值。
有 if () else ()
一开始是空,跑 else,之后不是空的时候,跑 if

我做的是头插法,可能你要的是尾插法

风骚的小胖子。 发表于 2018-10-7 21:33:31

claws0n 发表于 2018-10-7 21:29
head 不是结构体指针。你回头看 swap(int *x, int *y); swap(&a, &b); 原型里面,x 和 y 都是指针。
hea ...

好的我先去看看资料。实在不懂了再来找你。看下私聊呀/解救下我这个渴望学好C的孩子吧~~
页: [1]
查看完整版本: 单链表头插法出问题啦!!