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

//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
{
}

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
}

}```