我有這個程序,它具有創建列表的功能,刪除一個節點,如果它的值等於功能delete_node()
的參數x
,然後它打印鏈表節點。創建和打印工作正常,但我無法刪除值爲x
的節點。我得到我的原始列表或空白列表。C刪除鏈接列表中的節點
#include <stdio.h>
struct list {
int value;
struct list *next;
};
struct list *create_list(struct list *l, int x) {
//allocate memory for new tmp node
struct list *tmp = malloc(sizeof(struct list));
tmp->value = x;
//tmp shtohet ne koke te listes
tmp->next = l;
//l behet koka e listes
l = tmp;
return l;
}
struct list *delete_node(struct list *l, int x) {
while (l) {
if(l->value == x) {
//printf("%d", x);
struct list *tmp = malloc(sizeof(struct list));
tmp->value = l->next->value;
tmp->next = l->next->next;
l = tmp;
printf("%d ", tmp->value);
}
l = l->next;
}
return l;
}
int main() {
struct list *l = NULL;
for (int i=5; i>-6; --i)
l = create_list(l, i);
l = delete_node(l, 3);
while (l) {
printf("%d ", l->value);
l = l->next;
}
printf("\n");
return 0;
}
你正在遍歷鏈表,直到你到達結尾,因此當列表中的任何地方沒有找到'x'時,'return l'將返回NULL。當找到'x'時,你扔掉原始記錄並返回下一條記錄的副本,最後扔掉2條記錄,然後繼續遍歷列表的其餘部分,最後返回NULL。 – alvits