AoA,
I've been attempting to debug a problem in my circular linked list for 12hrs now. The function takes in an ADT which has a start and cursor field. The initial dummy cell points to itself. Insert elements. Repeat 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 in a series of integers and then sorts them into the LL parameter. Supposed to be used for a set (hence why no repeat entries).
The 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 inputting something like: 7, 3, 5, 1, 9, 2
out is only 7, 9 (so it can't handle values separated by more than one.. o.O)
Additional info:
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 a pointer type to setCDT. setElementT, however, is just a plain and simple int. Sorry for the ambiguity.