我正在学习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*
是虚拟节点!
答案 0 :(得分:1)
1)您需要将NULL
转换为正确的返回类型。所以,return (ListNode *) NULL
。
您可能希望将该函数的返回类型更改为ListNode *
。如果您确实想要返回struct
,那么返回NULL
将无效,因此您需要返回空的ListNode struct
。
2)要测试delete
是否有效,请创建一个非平凡的链接列表,打印内容,调用delete()
,然后再次打印内容以确保节点确实被删除了。
如果更新指针出现问题,您可能会在某处获得空指针,并且无法正确遍历列表。
3)首先,printf
应该在您的案例中使用两个参数:more info。第一个是格式字符串,它基本上告诉它类型,第二个是实际变量。
您需要知道要打印的类型。您需要将void *data
强制转换为正确的指针然后取消引用。 C无法知道你想要什么。
printf("%d\n", *(int *)mydata);