今天在學習鏈表的過程中遇到了這個問題,我用如下方法定義了一個結構體,然后這個函數想要在鏈表頭插入一個節點。但是在函數的最后一行卻出現了報錯:不能將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;