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的使用相信楼主一定能胜任的, 呵呵