我正在学习C中的结构,关于我的代码有两个问题:
1)为什么在insert()
方法中显示这些错误?:
|44|error: incompatible types when returning type 'void *' but 'ListNode' was expected|
|47|error: incompatible types when returning type 'struct Node *' but 'ListNode' was expected|
if(current -> next == NULL){
printf("The node was not found!");
return NULL; //<<<<<-----------------SHOWS ERROR HERE Line #44
}
和
return newNode; //Line #47
2)我已经为delete()
节点编写了代码,但感觉代码可能有些错误。我如何通过C中的main()
方法测试/运行程序:)?
3)如何在printList()
方法中打印任何类型的变量?
很抱歉问这些新手问题!谢谢!
注意:程序可以接受任何数据类型,head*
是一个虚拟节点!
1)您需要将NULL
转换为正确的返回类型。所以,return (ListNode *) NULL
。
您可能希望将该函数的返回类型更改为ListNode *
。如果你真的想返回struct
,那么返回NULL
将不起作用,所以你需要返回一个空的ListNode struct
。
2)要测试delete
是否工作,创建一个非平凡链表,打印内容,调用delete()
,并再次打印内容以确保节点确实被删除。
如果在更新指针时出了问题,你可能会在某个地方得到一个空指针,并且无法正确地遍历列表。
3)首先,printf
在您的情况下应该接受两个参数:more info。第一个是格式字符串,它基本上告诉它类型,第二个是实际的变量。
你需要知道你想要打印什么类型。您需要将void *data
强制转换为正确的指针,然后解引用。C没有办法知道你想要什么。
printf("%dn", *(int *)mydata);