C语言实现删除链表的一个节点
节点表示
struct node
{
int data;
node *next;
};
删除函数
//删除链表的一个节点
node *delete_node(node *head, int data)
{
node *p1, *p2;
if (head == NULL) {//链表为空(head=NULL)
printf("链表节点为空!\n");
return 0;
}
if (head->data == data) {//链表非空,删除表头。
p2 = head;
head = head->next;
printf("已删除该节点\n");
}
else
{ //链表非空,删除链表中间的结点。
p1 = head;
p2 = head;
while (p2->data!=data && p2->next!=NULL)
{
p1 = p2;
p2 = p2->next;
}
if (p2->data == data) {
p1->next = p2->next;
free((void *)p2);
printf("已删除该节点\n");
}
else printf("未找到该节点\n");
}
return head;
}