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.


Anmelden zum Antworten