Food for thought...
Code:
typedef struct node
{
int data;
node *next;
node *prev;
}NODE;
node * newnode(int data)
{
node * nd = new node;
if(nd != NULL)
{
nd->prev = 0;
nd->next = 0;
nd->data = data;
}
return nd;
}
node * headnode(node * index)
{
while(index && index->prev) index = index->prev;
return index;
}
node * tailnode(node * index)
{
while(index && index->next) index = index->next;
return index;
}
bool insertnode(node * insert, node * prev, node * next)
{
if(insert == NULL) return false;
// repoint old neghbors
if(insert->next != NULL) insert->next->prev = insert->prev;
if(insert->prev != NULL) insert->prev->next = insert->next;
insert->next = next;
insert->prev = prev;
// repoint new neghbors
if(insert->next != NULL) insert->next->prev = insert;
if(insert->prev != NULL) insert->prev->next = insert;
return true;
}
bool pushback(node ** head, int data)
{
node * nd = newnode(data);
if(*head == NULL) *head = nd;
else insertnode(nd, tailnode(*head), 0);
return (nd != NULL);
}
bool pushfront(node ** head, int data)
{
node * nd = newnode(data);
insertnode(nd, 0, *head);
*head = nd; // nd is new head
return (nd != NULL);
}
void displaylist(node * head)
{
while(head)
{
cout << head->data << endl;
head = head->next;
}
}
int main()
{
NODE * head = 0;
for(int i = 0; i < 10; i++)
pushback(&head, i);
for(int i = 0; i < 10; i++)
pushfront(&head, i);
displaylist(head);
cin.get();
return 0;
}