#include #include struct ListElement { struct ListElement *next; int tal; }; // lägg till ett element sist i listan void push_back(struct ListElement * head, int tal) { struct ListElement *lastElement, *nextElement; // skapa nytt element lastElement = (struct ListElement*)malloc(sizeof(struct ListElement)); lastElement->next = 0; lastElement->tal = tal; // hitta sista elementet i listan nextElement = head; while(nextElement->next != 0) nextElement = nextElement->next; nextElement->next = lastElement; } // ta bort sista elementet i listan // OBS. Denna funktion fungerar ej om listan innehåller // ett enda element. Varför lämnas som uppgift till läsaren. int pop_back(struct ListElement* head) { struct ListElement *currentElement; int rValue; currentElement = head; while(currentElement->next->next != 0 ){ currentElement = currentElement->next; } rValue = currentElement->next->tal; free(currentElement->next); currentElement->next = 0; return rValue; } // skriv ut alla tal i listan. void printLista(struct ListElement *head) { struct ListElement *currentElement; currentElement = head; while(currentElement != 0 ){ printf("%i ", (*currentElement).tal ); currentElement = currentElement->next; } printf("\n"); } int main(int argc, char **argv) { int tmp; // skapa första element struct ListElement *head; head = (struct ListElement*)malloc(sizeof(struct ListElement)); head->tal = 15; (*head).tal = 15; head->next = 0; printLista(head); // lägg till nya element push_back(head, 10); printLista(head); tmp = 10; while(tmp-- > 0) push_back(head, tmp); // ta bort sista elementet printLista(head); tmp = pop_back(head); printLista(head); // frigör första elementet. Varför är inte detta tillräckligt? // undersök med DrMemory. free(head); printf("hello world\n"); return 0; }