从链表中删除元素

时间:2014-01-23 00:16:08

标签: c linked-list

我有一些工作但仍然无法让最后一个元素删除工作它只是留下垃圾在它的位置而不是删除它。我知道这段代码看起来并不好,但就我现在的知识而言,这就是我能做的所有事情: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;
    }
}

1 个答案:

答案 0 :(得分:1)

您正在从头部而不是从临时删除项目数据。