wenn ich Knoten an den Kopf einfügen, funktioniert es nicht. aber an anderen Orten einfügen funktioniert gut.Verlorene Knoten beim Einfügen in den Kopf
hier ist meine Insert-Funktion
int insert_before(ListNode *head, ListNode *p, int x){
ListNode *tmp, *cursor;
if(head == NULL || p == NULL) return -1;
if(head == p){
tmp = malloc(sizeof(ListNode));
tmp->val = x;
// insert node
tmp->next = p;
p = tmp;
printf("insert before: \n");
printList(head);
return 0;
}
cursor = head;
while(cursor->next != p && cursor->next != NULL) cursor = cursor->next;
tmp = malloc(sizeof(ListNode));
tmp->val = x;
//insert node
tmp->next = p;
cursor->next = tmp;
printf("insert before: \n");
printList(head);
return 0;
}
meine Hauptfunktion
int main(){
ListNode *head, *tmp;
int x=0;
int arr[5] = {1,2,4,5,6};
head = createList(arr, 5);
printList(head);
tmp = get_by_index(head,3);
// insert
//insert_after(head, x);
insert_before(head, tmp, 100);
// insert_before(head, head, 100);
printf("in main: ");
printList(head);
printf("insert_before return %d \n", x);
return 0;
}
wenn ich insert_before laufen (Kopf, tmp, x), es funktioniert fein , wenn ich insert_before (Kopf, Kopf, 100) ausführen; es haben keine Änderungen;
Wie der Name schon sagt, sollte die Funktion 'insert_before' die Variable' head' aktualisieren, um auf den neu erstellten Kopf der Liste zu zeigen. Bei seiner gegenwärtigen Implementierung ist es unmöglich, da Sie diese Variable nach Wert übergeben. –
danke, ich verstehe es. – fangxing