AoA,
I am trying to debug a problem in my circular linked list for 12 hours. The function accepts an ADT that has a start and cursor field. The initial dummy cell points to itself. Insert items. Repetition elements are not allowed.
int setInsertElementSorted(setADT buffer, setElementT E) { bool isUnique = true; cellT *previous; previous = buffer->start; buffer->cursor = buffer->start->next; while(buffer->cursor != buffer->start){ if(buffer->cursor->value == E){ isUnique = false; } else if(E < buffer->cursor->value) break; else { previous = buffer->cursor; buffer->cursor = buffer->cursor->next; } } if(isUnique != false){ cellT *newNode = malloc(sizeof(cellT)); newNode->value = E; previous->next = newNode; newNode->next = buffer->cursor; buffer->count++; return (buffer->count); } }
The code takes an integer number of integers and then sorts them into the LL parameter. It is assumed that it will be used for dialing (hence why there are no duplicate entries).
Output for: 9, 8, 7, 6, 5, 4, 3, 2, 1
is .. 3, 4, 5, 6, 7, 8, 9 (what happened to the first two values?)
When entering something like: 7, 3, 5, 1, 9, 2
out is only 7, 9 (so it cannot handle values ββseparated by more than one .. oO)
Additional Information:
typedef struct cellT { int value; struct cellT *next; } cellT; struct setCDT{ int count; cellT *start; cellT *cursor; }; setADT setNew() { setADT newNode = malloc(sizeof(struct setCDT)); newNode->start = newNode->cursor = malloc(sizeof(cellT)); newNode->start->next = newNode->cursor->next = newNode->start; newNode->count = 0; return (newNode); }
setADT is the pointer type for setCDT. setElementT, however, is a simple and simple int . Sorry for the ambiguity.