繁体   English   中英

在链表中插入和删除节点

[英]Inserting and deleting a node in 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)您需要将NULL转换为正确的返回类型。 因此, return (ListNode *) NULL

您可能想要将该函数的返回类型更改为ListNode * 如果您确实想返回该struct则返回NULL将不起作用,因此您需要返回一个空的ListNode struct

2)要测试delete有效,请创建一个非平凡的链表,打印内容,调用delete() ,然后再次打印内容以确保确实删除了该节点。

如果在更新指针时出了点问题,您可能会在某个地方得到一个空指针,并且将无法正确地遍历列表。

3)首先,在您的情况下, printf应该接受两个参数: more info 第一个是格式字符串,基本上可以告诉它类型,第二个是实际变量。

您将需要知道要打印的类型。 您需要将void *data强制转换为正确的指针,然后取消引用。 C无法知道您想要什么。

printf("%d\n", *(int *)mydata);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM