
int DeleteNodes(Node** phead, double x) {
Node* prev = NULL;
Node*** pphead = &phead;
int count = 0;
for (int pos = 1; currNode; prev = currNode, currNode = currNode->next) {
if (currNode->data == x) {
if (prev) {
prev->next = currNode->next;
free(currNode);
count++;
currNode = prev;
}
else {
*phead = currNode->next;
free(currNode);
count++;
currNode = **pphead;
if (currNode->next == NULL)
free(currNode);
}
}
}
return count;
}*/
int DeleteNodes(Node** phead, double x) {
int count = 0;
Node* current =*phead;
Node* pre=NULL;
while (current != NULL) {
if (current->data == x) {
if (pre == NULL) {
//如果删除的节点是头结点,那么原来链表的第二个节点就是头节点,此时pre依旧是NULL
*phead = current->next;
count++;
free(current);
current = *phead;
}
else {
//删除的节点不是头结点,那么pre的下一个节点就是当前节点的下一个节点
pre->next = current->next;
count++;
free(current);
current = pre->next;
}
}
else {
pre = current;
current = current->next;
}
}
return count;
}
int DeleteNodes(Node **phead, double x) {
int count = 0;
Node *current = *phead;
Node *pre = NULL;
while (current) {
if (current->data == x) {
if (!pre) {
//如果删除的节点是头结点,那么原来链表的第二个节点就是头节点,此时pre依旧是NULL
*phead = current->next;
} else {
//删除的节点不是头结点,那么pre的下一个节点就是当前节点的下一个节点
pre->next = current->next;
}
count++;
Node *p = current;
current = current->next;
free(p);
} else {
pre = current;
current = current->next;
}
}
return count;
}