It might be easier if you break the create list function up. Here's one solution, but it would be even clearer if my InsertNode function was broken up into functions to check for inserting before/after and whether Node has to go at the head of the list.
Code:
void InsertNode(Node* &First, Node* &toInsert)
{
Node* Iterator = First;
while(toInsert->ID>Iterator->ID&& Iterator->Next!=NULL)
Iterator=Iterator->Next;
if(toInsert->ID>Iterator->ID) //Insert after Iterator
{
Node* Temp = Iterator->Next;
Iterator->Next=toInsert;
toInsert->Next=Temp;
}
else //Insert before Iterator
{
if(Iterator==First)
{
Node* Temp = First;
First=toInsert;
toInsert->Next=Temp;
return;
}
Node* Prev = First;
while(Prev->Next!=Iterator)
Prev=Prev->Next;
Prev->Next=toInsert;
toInsert->Next=Iterator;
}
}
void createlistKB(Node * &First)
{
First = new Node;
First->Next=NULL;
cout << "Enter ID (999 to quit): ";
cin >> First->ID;
Node* Temp;
for(;; )
{
int input=0;
cout << "Enter ID(999 to quit): ";
cin>>input;
if(input==999)break;
Temp = new Node;
Temp->ID=input;
Temp->Next=NULL;
InsertNode(First,Temp);
}
}