Code: Alles auswählen
typedef struct listEntry {
int value;
struct listEnry *next;
} listEntry;
// Ausgangselement: Zeiger auf das erste Element
static struct listEntry *begin = NULL;
void initList(void) {
begin = (listEntry*) malloc(sizeof(struct listEntry));
begin->next = NULL;
}
void insert(int value) { //
listEntry *prevEl;
listEntry *iterEl = begin;
listEntry *newEl = (listEntry*) malloc(sizeof(struct listEntry));
newEl->value = value;
/*
* Ueber die Elemente iterieren
*/
while(iterEl->next != NULL) {
prevEl = iterEl;
iterEl = iterEl->next;
if(iterEl->value > value)
break;
}
if(prevEl == begin) { // 4, -1, 0 fuehrt zu Fehler
newEl->next = begin->next;
begin->next = newEl;
} else if(iterEl->next == NULL) {
iterEl->next = newEl;
newEl->next = NULL;
} else {
newEl->next = prevEl->next;
prevEl->next = newEl;
}
}

Ich rufe dabei die insert Methode mit den Werten 4, -1 und 0 auf und dabei sollten die Elemente ja eigentlich immer sortiert sein, also von kleiner nach größer (-1, 0, 4) und bei 4 und der -1 läuft das auch noch aber aber wenn ich die 0 eingebe, steht diese plötzlich am Ende, statt hinter der -1. Das funktioniet auch bei alle anderen Werten nicht, wenn ich zwei Zahlen eingebe und eine Zahl dazwischen, die dann größer als die erste und kleiner als die zweite ist aber ich sehe den Fehler nicht? Was mache ich falsch?
Bei Bedarf kann ich auch das ganze Projekt hochladen. Eine Sache fällt mir da auch noch ein, und zwar habe ich unter anderem in der Zeile
Code: Alles auswählen
iterEl = iterEl->next;
Code: Alles auswählen
assignment from incompatible pointer type [enabled by default]
Kann man die insert Methode evtl. auch noch ein wenig vereinfachen oder passt das so wohl?