在链表中插入和删除节点

时间:2015-10-18 23:08:00

标签: c struct linked-list

我正在学习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 个答案:

答案 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);