Thats a general concept of deleting a node and NULL means last node if your one is cyclic you can check the value of the next pointer to be equal to the header and that means you have travelled the complete list to find the data.

Yes free is actually similar to delete in C++. and we can delete any node using newnode -> next -> next because in the structure next means the address to the next node and we can delete the next to next node.

I hope this clears your queries to some extent.

Regarding your code you mentioned
Code:
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;
 }
But I dont see any thing related to deleting but it just loops through all the element and breaks assigning wrong value to your variable linker.