I've properly commented my code so hopefully this will help you a little further:

Code:
void ring::remove(int x)
{
node* prev = current -> shortlink; // current is pointing to the first node in the linked list 
node* cur = current; // cur now also points to the first node in the linked list
node* linker = current; // as does linker




 //cur = prev;
 for (int j = 1; j < length; j++) // this loop is to determine that if the first node gets deleted - then linker will point to the last node
 {
 linker = linker -> shortlink;
 }
 

 for (int i=1; i < length ; i++)


 {
 if (prev -> num == x) // if the first node holds true for this condition
  {
  current = current -> shortlink; // so if the if condition was met - then current now points to the 2nd node 
  cur -> shortlink = prev -> shortlink ; // cur now also points to the 2nd node - 
  linker = prev -> shortlink; // this ensures that the last node doesn't point to 1 anymore, but actually to 2
  delete prev; // delete the reference to the 1st node - technically now, nothing should be pointing to the 1st node
  length--; -- decrease the size of the list to n-1
  }
  cur = prev;
  prev = prev -> shortlink; // if the if statement wasn't satisfied - move prev along to point to the 2nd node
 } 


}