2014-01-23 114 views
-1

我得到了一些東西的工作,但我仍然不能得到最後一個元素刪除工作它只留下垃圾在它的地方,而不是刪除它。我知道這段代碼看起來不太好,但基於我目前的知識,這就是我所能做的: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; 
    } 
} 
+0

如果有人願意幫助它,那麼改變了大部分代碼會很好,看起來我的代碼並沒有刪除最後一個元素,並且中間似乎工作正常。 – user3209183

回答

1

你從頭部而不是臨時刪除項目數據。

+0

添加了一些東西,似乎是我工作期望最後一個,如果我刪除最後一個時,當我打印我的列表我看到垃圾,而不是此節點 – user3209183

+0

我看不到你在哪裏取消下一個指針指向最後一個元素。那現在有什麼不對嗎? – noelicus