This function here interchanges nodes in a linked list
Code:
void interchangeNodes(nodeptr&head, int n, int m);
Here is what I have so far:
Code:
void interchangeNodes(nodeptr& head, int n, int m) {
nodeptr temp = head;
nodeptr temp2;
int i = 1;
if(temp == NULL || temp->next == NULL) //nothing happens if either is null value
return;
if(n == m) //nothin happens if n node is equal to m node
return;
if(n < m){ //swap the two if n is less then m
int temp;
temp = n;
m = m;
temp = m;
}
if(m == 1) {
temp = temp->next; //if n = 1, interchange first node and nth node
temp2 = head;
if(n == 2) { //interchange first two nodes
head = head->next;
temp->next = head->next;
head->next = temp;
}
}
else //otherwise, advance temp to n - 1st node... do nothing if next is of null
{
while(i < n - 1) {
if(temp->next == NULL)
return;
else
temp = temp->next;
i++;
}
temp2 = temp->next; //temp2 is nth node
//set 1st node to point to n + 1st node
temp2->next = head->next;
temp->next = head;
head = temp2;
}
if(m > 1){
while(i < m - 1){ //advance temp to point to m - 1st node, do nothing if next is of null
if(temp->next == NULL)
return;
else
temp = temp->next;
i++;
}
}
}
Where I am getting stuck is this, maybe my whole function is wrong also, interchange 2 adjacent nodes... otherwise, advance temp2 to point to n - 1st node. Then temp2 will be the new node and once again set the 1st node to point to n + 1st nodes. Easy... I thought, until I first ran what I have so far and see that I am in an infinite loop. And so then I broke down and quit for this while being. Can help please be given here?