/* ** Copies one link list to the other item by item if the item from is not already in list to */ void LinkedListCopyIfNotExistInTo(LINKED_LIST *lt, LINKED_LIST *lf) { LINKED_LIST_NODE *lf_traverse; LINKED_LIST_NODE *lt_traverse; LINKED_LIST_NODE *lt_original_head = lt->first; int found; /* go through the list from (lf) and put each item in list to (lt) */ for (lf_traverse = lf->first; lf_traverse != NULL; lf_traverse = lf_traverse->next) { found = FALSE; /* go through the list and if find then state that you found */ for (lt_traverse = lt_original_head; lt_traverse != NULL; lt_traverse = lt_traverse->next) { if (lf_traverse->data == lt_traverse->data) { found = TRUE; break; } } /* if you don't find, add this data to the front so we don't * compare */ if (found != TRUE) { LinkedListPrepend(lt, lf_traverse->data); } } }
/* LinkedListInsert: return new value after inserting. */ foint LinkedListInsert(LINKED_LIST *ll, foint newEntry) { LINKED_LIST_NODE *prev = NULL, *curr = ll->first; trapAssert(ll->Cmp != NULL); /* if we're first... */ if(ll->first == NULL || ll->Cmp(newEntry, ll->first->data) < 0) return LinkedListPrepend(ll, newEntry); /* we should be last */ if(ll->Cmp(newEntry, ll->last->data) >= 0) return LinkedListAppend(ll, newEntry); /* else ... */ while(curr != NULL && ll->Cmp(newEntry, curr->data) >= 0) { prev = curr; curr = curr->next; } trapAssert(curr != NULL); /* if we're last, it should've been done above! */ prev->next = (LINKED_LIST_NODE*)paj_alloc(sizeof(LINKED_LIST_NODE)); prev->next->data = newEntry; prev->next->next = curr; ll->n++; return newEntry; }
int main(int argc, char* argv[] ) { int value = 0; LinkedListHandle* list = LinkedListNew(); DBG_ASSERT(list != C_NULL); DBG_ASSERT( LinkedListSize(list) == 0 ); LinkedListAppend(&value, list); DBG_ASSERT( LinkedListSize(list) == 1 ); LinkedListPrepend(&value, list); DBG_ASSERT( LinkedListSize(list) == 2 ); LinkedListPrepend(&value, list); DBG_ASSERT( LinkedListSize(list) == 3 ); LinkedListAppend(&value, list); DBG_ASSERT( LinkedListSize(list) == 4 ); LinkedListAppend(&value, list); DBG_ASSERT( LinkedListSize(list) == 5 ); LinkedListPop(list); DBG_ASSERT( LinkedListSize(list) == 4 ); LinkedListPop(list); DBG_ASSERT( LinkedListSize(list) == 3 ); LinkedListShift(list); DBG_ASSERT( LinkedListSize(list) == 2 ); LinkedListShift(list); DBG_ASSERT( LinkedListSize(list) == 1 ); LinkedListDelete(list); return 0; }