C 从链表中删除元素

C 从链表中删除元素,c,linked-list,C,Linked List,我得到了一些工作,但我仍然无法得到最后一个元素删除工作,它只是在它的地方留下垃圾,而不是删除它。我知道这段代码看起来不太好,但根据我目前的知识,这就是我所能做的:x。所以,如果有人能帮我删除最后一个元素,或者告诉我我做错了什么,那就太好了 struct item { char item_name[30]; char item_state[30]; float item_price; char item_status[30]; float item_pric

我得到了一些工作,但我仍然无法得到最后一个元素删除工作,它只是在它的地方留下垃圾,而不是删除它。我知道这段代码看起来不太好,但根据我目前的知识,这就是我所能做的:x。所以,如果有人能帮我删除最后一个元素,或者告诉我我做错了什么,那就太好了

struct item {
    char item_name[30];
    char item_state[30];
    float item_price;
    char item_status[30];
    float item_price_if_not;
    struct item *next;
};
struct client {
    char client_name[30];
    char client_last_name[30];
    struct item *item_data;
    struct client *next;
};

void DeleteClient2(struct client *temp,struct client **head) {
    struct client *prev=*head;
    struct client *current = *head;
    struct item *currentitem = (*head)->item_data,*save;
    if(temp== *head) {
        while(currentitem != NULL) {
            save = currentitem;
            currentitem = currentitem ->next;
            free(save);
        }
        free(temp);
        temp->item_data = NULL;
        (*head) = (*head)->next;
    }
    else if(temp->next == NULL) {
        while(currentitem != NULL)  {
            save = currentitem;
            currentitem = currentitem ->next;
            free(save);
        }
        temp->item_data = NULL;
        free(temp);
    }
    else if(temp != *head && temp->next != NULL) {
        while(prev->next != temp) {
            prev=prev->next;
        }
        prev->next = temp->next;
        while(currentitem != NULL) {
            save = currentitem;
            currentitem = currentitem ->next;
            free(save);
        }
        temp->item_data = NULL;
        free(temp);
        temp=temp->next;
    }
}

您正在从head而不是temp中删除项目数据

除了最后一个之外,在我之前的大部分东西似乎都能正常工作。如果我在打印列表时删除最后一个,我看到的是垃圾而不是这个节点。我看不到你在哪里清空指向最后一个元素的下一个指针。这就是现在的问题所在吗?如果有人愿意帮助的话,更改了大部分代码,这将是非常好的,我的代码似乎没有删除最后一个元素,第一个元素,中间的元素似乎工作正常。