Ich bin eine einfach verkettete Liste in C implementieren und blieb mit der remove-Knoten-Funktion stecken. Es entfernt das Element, verbindet zwei seiner Nachbarn, aber der folgende Knoten ruft die nächste Knotenadresse auf NULL. Warum? Kann jemand helfen?einfach verknüpfte Liste in C - Knoten Entfernungsproblem
struct node{
struct node* next;
int value;
};
struct list{
struct node* head;
struct node* tail;
};
void remove_node(struct list* plist, int value){
struct node* current;
struct node* temp;
current = plist->head;
if (!(current)) return;
if (current->value == value){
if (!(current->next)){
plist->head = NULL; plist->tail = NULL;
}
else {
plist->head = current->next;
free(current);
}
}
else {
while(current->next){
if(current->next->value==value){
if ((current->next)->next){
temp = current->next;
current->next = (current->next)->next;
free(temp);
}
else{
temp = current->next;
plist->tail = current;
current->next = NULL;
free(temp);
break;
}
}
current = current->next;
}
}
}
Node current current->next
0 0x9f39018 0x9f39028
1 0x9f39028 0x9f39038
2 0x9f39038 0x9f39048
3 0x9f39048 0x9f39058
4 0x9f39058 0x9f39068
5 0x9f39068 0x9f39078
6 0x9f39078 0x9f39088
7 0x9f39088 0x9f39098
8 0x9f39098 0x9f390a8
9 0x9f390a8 (nil)
after remove(5)
0 0x9f39018 0x9f39028
1 0x9f39028 0x9f39038
2 0x9f39038 0x9f39048
3 0x9f39048 0x9f39058
4 0x9f39058 0x9f39078
6 0x9f39078 (nil)
der Code wurde – matcheek
Watch out korrigiert. Wenn die Nummer, die Sie löschen möchten, nicht in der Liste enthalten ist, versuchen Sie einen Nullzeiger mit 'if ((current-> next) -> next) zu dereferenzieren. – Santa
gerade dort, danke für das Erkennen, dass – matcheek