#include "genHTML.h"
/* Doubly-Linked Lists */
/* Algorithms */
/* Insertion Into a Sorted Doubly-Linked List */
NODE *doubleInsert(NODE *ListHeader, int NewYear)
{
NODE *newNode, *nodeN, *gonnaBeNext, *gonnaBePrev;
/* test for duplicate */
for (nodeN = ListHeader; nodeN != NULL; nodeN=nodeN->Next) {
if (NewYear == nodeN->Year)
return ListHeader;
}
/* Allocate a new node */
newNode = (NODE *) malloc(sizeof(NODE));
if (newNode == NULL)
{
perror("Error - Out of memory.\n");
exit(1);
}
/* Fill in node information */
newNode->Year = NewYear;
gonnaBeNext = ListHeader;
if (ListHeader == NULL || NewYear <= ListHeader->Year)
{
newNode->Prev = NULL;
newNode->Next = gonnaBeNext;
if (gonnaBeNext != NULL)
gonnaBeNext->Prev = newNode;
return newNode;
}
else
{
while (gonnaBeNext != NULL && newNode->Year > gonnaBeNext->Year)
{
gonnaBePrev = gonnaBeNext;
gonnaBeNext = gonnaBeNext->Next;
}
gonnaBePrev->Next = newNode;
newNode->Prev = gonnaBePrev;
newNode->Next = gonnaBeNext;
if (gonnaBeNext != NULL)
gonnaBeNext->Prev = newNode;
return ListHeader;
}
}
/* Deletion From a Sorted Doubly-Linked List */
NODE *doubleDelete(NODE *ListHeader, int DeleteYear)
{
NODE *P, *T, *S;
P = ListHeader;
if (P != NULL && P->Year == DeleteYear)
{
T = P->Next;
free(P);
if (T != NULL)
T->Prev = NULL;
return T;
}
else
{
while (P != NULL && P->Year < DeleteYear)
{
T = P;
P = P->Next;
}
if (P == NULL || P->Year > DeleteYear)
printf("Error - key %d not found in list.\n", DeleteYear);
else
{
S = P->Next;
T->Next = S;
free(P);
if (S != NULL)
S->Prev = T;
return ListHeader;
}
}
}