这个删除链表中所有x要怎么实现 我写完之后这个for循环在第二三种情况下停不下来

img


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;
}