hey all,
there I was, thinking I have linked list pretty much figured out, and here I am now; confused with a very simple problem (i think). Anyways, below is a code, where I am trying to create two seperate linked lists, abd later print them out. If I do just one, everything works fine, but when I do two, I get everything twice, basically instead of getting 0 1 2 3 4 I get 0 1 2 3 4 0 1 2 3 4.
any suggestions?
axon
Code:
#include <iostream>
using namespace std;
struct Node {
Node *pNext;
Node *pPrev;
int nData;
};
Node *pHead, *pTail;
void AppendNode( Node *pNode);
//appends node to end of list
void InsetNode(Node *pNode, Node *pAfter);
//insert node into the list after pAfter
void RemoveNode(Node *pNode);
//Remove specified node from list
void DeleteAllNodes();
//Delete the entire list
int main()
{
Node *L1;
Node *L2;
//add items to linked list
for ( int i = 0; i< 5; i++ ) {
L1 = new Node;
L1->nData = i;
AppendNode( L1 );
}
for ( i = 0; i< 5; i++ ) {
L2 = new Node;
L2->nData = i;
AppendNode( L2 );
}
//display all nodes
cout << "-----------==LIST 1==--------------" << endl << endl;
for ( L1 = pHead; L1 != NULL; L1 = L1->pNext ) {
cout << L1->nData << endl;
}
cout << "-----------==LIST 2==--------------" << endl << endl;
for ( L2 = pHead; L2 != NULL; L2 = L2->pNext ) {
cout << L2->nData << endl;
}
return 0;
}
//========================================
void AppendNode( Node *pNode)
{
if ( pHead == NULL ) {
pHead = pNode;
pNode->pPrev = NULL;
} else {
pTail->pNext = pNode;
pNode->pPrev = pTail;
}
pTail = pNode;
pNode->pNext = NULL;
}
//========================================
void InsetNode(Node *pNode, Node *pAfter)
{
pNode->pNext = pAfter->pNext;
pNode->pPrev = pAfter;
if ( pAfter->pNext != NULL ) {
pAfter->pNext->pPrev = pNode;
} else {
pTail = pNode;
}
pAfter->pNext = pNode;
}
//========================================
void RemoveNode(Node *pNode)
{
if ( pNode->pPrev == NULL ) {
pHead = pNode->pNext;
} else {
pNode->pPrev->pNext = pNode->pNext;
}
if ( pNode->pNext == NULL ) {
pTail = pNode->pPrev;
} else {
pNode->pNext->pPrev = pNode->pPrev;
}
}
//========================================
void DeleteAllNodes()
{
while ( pHead != NULL ) {
RemoveNode( pHead );
}
}