/*
** 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;
}
Пример #3
0
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;
}