Pointer auf Pointer
-
Hallo,
ich möchte eine verkettete Liste (l) in zwei Listen aufspalten. Die neuen Listen a und b werden als Zeiger auf Zeiger übergeben. Das Aufspalten klappt so weit, allerdings werden die Listen a und b nicht zurückgegeben. Ich vermute mal, dass ich das mit dem Zeiger auf Zeiger falsch umgesetzt habe. Wie verwendet ich a und b in der Funktion richtig, damit sie später auch im Hauptprogramm aufgerufen werden können?struct Element { int data; Element* next; }; struct LinkedList { Element* head; int size; }; void split(LinkedList* l, int v, LinkedList** a, LinkedList** b) { Element* x; Element** y = new Element*; Element** z = new Element*; bool check = false; a = new LinkedList*; a[0] = new LinkedList; a[0]->head = nullptr; a[0]->size = 0; b = new LinkedList*; b[0] = *b; b[0] = new LinkedList; b[0]->head = nullptr; b[0]->size = 0; x = l->head; for (int i = 0; i < l->size; i++) { if (x->data != v && check == false) { if (a[0]->size == 0) { a[0]->head = new Element; y[0] = a[0]->head; y[0]->data = x->data; a[0]->size = 1; } else { y[0]->next = new Element; y[0] = y[0]->next; y[0]->data = x->data; a[0]->size++; } } if (x->data == v || check == true) { if (b[0]->size == 0) { b[0]->head = new Element; z[0] = b[0]->head; z[0]->data = x->data; b[0]->size = 1; check = true; } else { z[0]->next = new Element; z[0] = z[0]->next; z[0]->data = x->data; b[0]->size++; } } x = x->next; } y[0]->next = nullptr; z[0]->next = nullptr; } int main() { LinkedList* l = create(); LinkedList* a, *b; split(l, 7, &a, &b); }
-
du meinst vielleicht
*a = new LinkedList; ... *b = new LinkedList; ...
-
Tausend Dank, jetzt geht es!
-
Man könnte hier statt Zeiger auf Zeiger auch Referenzen auf Zeiger verwenden. Würde ich besser finden.
void split(LinkedList* l, int v, LinkedList*& a, LinkedList*& b)
Mir ist auch nicht ganz klar warum die LinkedList unbedingt dynamisch erstellt werden muss.