编写C函数 从单项列表中删除一个结点 结点值为X

是学习CAD⼀CAM的一道题 时间长不看C语言 都忘记了 求指点
2024-12-21 09:18:55
推荐回答(1个)
回答1:

typedef struct _NODE
{
int data;
struct _NODE * pNext;

}NODE, PNODE;

bool delete_list(PNODE pHead, int val)
{
PNODE p = pHead;

while(NULL != p && p->data!=val) //标识指针还有后续结点, 并逐个判断值是否一致

{
p = p->pNext;
}

//上面的while循环最大可能就是NULL= p
if(NULL==p)
return false;

PNODE q = p->pNext;

p->pNext = p->pNext->pNext;
free(q);
q = NULL;

return true;
}

这个就是删除第一个val值的方法, 原理就是从第一个有效节点开始遍历比较,同时注意当前比较仍有效
循环结束的条件有两个一个是找到了节点p的data与val相等, 这时候p必定不是NULL, 然哦胡就可以释放p并在p处改变链表的关系; 另一种情况是没有找到一个节点data值与val相等, 这个时候必定在p==NULL时结束while循环, 从而函数返回false, 表示没有找见

至于主函数main的使用相信楼主一定能胜任的, 呵呵