PTA数据结构练习题6-6带头结点的链式表操作集

制作空表

在这里插入图片描述
创建一个结点作为头结点,将头结点指向的下一个结点位置的指针初始化为空指针。

查找结点

改错前

在这里插入图片描述

逻辑混乱,当前结点的值不等于X,则进入循环,可是判断条件在循环内部,如果此时cur走到了数值为X结点的位置,但是无法进入循环进行判断。

改错后

在这里插入图片描述
将判断条件修改,意思是当没有走完链表的时候进入循环,然后每走一步,判断一次。如果遇到与X值相同结点,则返回cur,否则当链表走完时,都没有返回cur,说明与X相同值的结点不存在,则返回ERROR。

插入结点

思路是找到要插入的位置的结点的前一个结点,然后进行插入

改错前

在这里插入图片描述
错误的点在newnode = NULL,这步骤不仅多余,而且增加了野指针错误的风险。

改错后

在这里插入图片描述
直接将新结点的拿来使用。
不必画蛇添足初始化为NULL

删除结点

找到被删除结点的前一个结点,用一个指针变量记住被删除结点的位置,然后将被删除结点的前一个结点直接指向被删除结点的下一个结点。然后用free函数释放被删除结点。

改错前

在这里插入图片描述
错误点:
在判断要删除位置是否合法的逻辑中存在问题。当 cur == NULL 时判定为非法位置并返回 false 不太准确,这里的 cur 应该是指向要删除节点 P 的前一个节点,正常情况下只有当 cur->Next 为 NULL 时(也就是遍历完链表都没找到 P 对应的前序节点)才应该判定为非法位置,而单纯 cur 为 NULL 并不一定意味着位置非法,比如链表本身为空时进行删除操作,初始 cur 就是 L(头节点),这种情况就不应该误判为非法位置。

改错后

在这里插入图片描述
正确修改思路:
将判断条件改为 if (cur->Next == NULL),这样只有在遍历完链表都没找到 P 对应的前序节点(即 cur 的下一个节点不是要找的 P 且已经到链表末尾了)时,才认定是非法位置,打印错误提示并返回 false

源代码地址

源代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值