Double Linked List - Vergesserungen



  • damit waere die liste selbst das aktuelle element.
    kann man machen; muss man aber nicht.

    da taucht ja ein problem auf merke ich gerade, dann kann ich keinen pointer auf das erste bzw. letzte element speichern....weil dann jeder knoten einen anderen pointer auf das letzte element hat, wenn ich nur push_back mache....hmmmm



  • mit liste als das aktuelle element...deshalb sowas wohl ungeeignet in bezug auf last, first:

    typedef struct doubleLinkedList
    {
        void *data;
        struct doubleLinkedList *previous;
        struct doubleLinkedList *next;
        struct doubleLinkedList *first;
        struct doubleLinkedList *last;
    }doubleLinkedList;
    
    void list_push_back(doubleLinkedList **list, void *element)
    {
        doubleLinkedList *temp = (doubleLinkedList*)malloc(sizeof(doubleLinkedList));
        temp->data = element;
        temp->first = NULL;
        temp->last = NULL;
    
        if(*list) {
    	temp->previous = (*list)->last;
            temp->next = NULL;
            (*list)->last->next = temp;
    	(*list)->last = temp;
        }
        // begin node
        else {
            temp->next = NULL;
            temp->previous = NULL;
            (*list) = temp;
    	(*list)->first = temp;
    	(*list)->last = temp;
        }
    }
    
    void list_getFirst(doubleLinkedList **list, void **element)
    {
    	*element = (*list)->first->data;
    }
    
    void list_getLast(doubleLinkedList **list, void **element)
    {
    	*element = (*list)->last->data;
    }
    
    void list_printAll(doubleLinkedList **list)
    {
        doubleLinkedList *temp = *list;
    
        while(temp != NULL) {
            printf("%d\n",*((int*)(temp->data)));
            temp = temp->next;
        }
    }
    
    int main()
    {
        doubleLinkedList *l = NULL;
        int i = 5;
        int j = 10;
        int k = 20;
        void *result;
    
        list_push_back(&l, &i);
        list_push_back(&l, &j);
        list_push_back(&l, &k);
    
        list_printAll(&l);
    
        list_getFirst(&l, &result);
        printf("First: %d\n",*((int*)result));
    
        list_getLast(&l, &result);
        printf("Last: %d\n",*((int*)result));
    
        return 0;
    }
    


  • weil dann jeder knoten einen anderen pointer auf das letzte element hat, wenn ich nur push_back mache

    den ansatz hattest du doch sowieso schon verworfen indem du die node-struktur eingefuehrt hast:

    struct node
    {
        void *data;
        struct node *prev;
        struct node *next;
    };
    

Anmelden zum Antworten