要实现删除最后一个公式的功能,可以在删除公式之前先遍历到最后一个公式的位置。以下是完善后的代码:

// 删除已添加的公式
void deleteFormula(struct Formula** head) {
    if (*head == NULL) {
        printf("未已添加的公式。\n");
        return;
    }
    printf("请选择要删除的公式:\n");
    printFormulas(*head);
    int index;
    scanf("%d", &index);
    if (index < 1) {
        printf("无效的选项,请重新输入。\n");
        return; 
    }
    if (index == 1) {
        struct Formula* temp = *head;
        *head = (*head)->next;
        free(temp);
        printf("公式删除成功!\n");
        return;
    }
    struct Formula* current = *head;
    int i = 1;
    while (current->next != NULL && i < index - 1) {
        current = current->next;
        i++;
    }
    if (current->next == NULL) {
        printf("无效的选项,请重新输入。\n");
        return;
    }
    if (current->next->next == NULL) {
        struct Formula* temp = current->next;
        current->next = NULL;
        free(temp);
        printf("公式删除成功!\n");
        return;
    }
    struct Formula* temp = current->next;
    current->next = temp->next;
    free(temp);
    printf("公式删除成功!\n");
}

在原有的代码基础上,添加了处理删除最后一个公式的情况。首先判断最后一个公式的下一个指针是否为NULL,如果是,说明当前只有一个公式,直接删除即可。然后再判断当前公式的下一个指针的下一个指针是否为NULL,如果是,说明当前公式的下一个公式就是最后一个公式,将当前公式的下一个指针设置为NULL即可


原文地址: https://www.cveoy.top/t/topic/iXTR 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录