今天在学习链表的过程中遇到了这个问题,我用如下方法定义了一个结构体,然后这个函数想要在链表头插入一个节点。但是在函数的最后一行却出现了报错:不能将MyLinkedList * 类型的值分配到MyLinkedList * 类型的实体。

    typedef struct {
int val;
MyLinkedList* next;
} MyLinkedList; void myLinkedListAddAtHead(MyLinkedList* obj, int val) {
MyLinkedList* Temp;
MyLinkedList* Node = (MyLinkedList*)malloc(sizeof(MyLinkedList));
if (Node == NULL) {
printf("Out of space!");
}
else {
Node->val = val;
Temp = obj;
obj = Node;
Node = Temp;
obj->next = Node;//这一行赋值时报错
}
}

经过一番百度和试验,发现问题出在结构体的定义上。因为结构体中的MyLinkedList指针先于MyLinkdList结构体出现,所以会发生编译器不认识的情况。特别是vs的语法高亮还十分迷惑,让你误以为这里没有问题(这应该是C++而不是C的写法)。于是改正后的代码如下:

    typedef struct MyLinkedList{
int val;
MyLinkedList* next;
} MyLinkedList;
05-10 19:54