I made it tis way
Code:
void swapNodes(linklist* &address, int node1, int node2){
linklist* n1=NULL,*n2=NULL,*p1=NULL,*p2=NULL,*tmp;
cout<<node1<<" "<<node2<<endl;
int count=getNodeCount(address);
if(node1 > count || node2 >count || node1 < 0 || node2 < 0 || count < 2){cout<<"swapNodes(): illegal position!"<<endl; return;}
if(node1 > -1){ n1= getNodeAddress(address, node1);}
if(node2 > -1) n2= getNodeAddress(address, node2);
if(node1-1 >= 0) p1= getNodeAddress(address, node1-1);
else p1 = NULL;
if(node2-1 >= 0) p2= getNodeAddress(address, node2-1);
else p2= NULL;
if(p1!=NULL && p2!=NULL && (p1 == n2 || p2 == n1)) {
p1->node=n1->node;
tmp=n2->node;
n2->node=n1;
n1->node=tmp;
}
else if(p1==NULL && p2!=NULL && (p1 == n2 || p2 == n1)){
tmp=n2->node;
n2->node=address;
n1->node=tmp;
address=n2;
}
else if(p1!=NULL && p2==NULL && (p1 == n2 || p2 == n1)){
tmp=n1->node;
n1->node=address;
n2->node=tmp;
address=n1;
}
else{
tmp= n1->node;
n1->node=n2->node;
n2->node= tmp;
if(p1!=NULL && p2!= NULL){
tmp=p1->node;
p1->node=p2->node;
p2->node=tmp;
}
else if(p1==NULL) {cout<<"NULL"<<endl;tmp= p2->node; p2->node=address; address= tmp;}
else if(p2==NULL) {cout<<"NULL"<<endl;tmp= p1->node; p1->node=address; address= tmp;}
else cout<<"Error in swapNode()"<<endl;
}
}
int destroyAllNodes(linklist* address){
int count=0;
while(address->node!=NULL) {
count++;
linklist* nextNodeAddress=address->node;
delete address;
address=nextNodeAddress;
}
delete address;
return count;
}
C++ Linked list in STL gives random access permission, doesn't it?