To understand this better, look at the illustrations. Let's assume we will represent a node this way:
Here we can see the value in the node, the current address of the node, and the next pointer. The next is nothing but stores the address of the next element in the linked list. This way we can traverse and perform other operations in the Linked List.
So, the linked list will look like:
Now, if someone tries to traverse the node, they will do so from head to tail. What if the head is actually misplaced, like let's say right now the head points to address 5k which has a value of 10. So if someone traverses now, they will see 10, 20, 30, 40, 50.
But what if we misplace the head to say address 6k, then? Whoever will try to traverse will only be able to get the data 20, 30, 40, 50. Isn't that what we want? We want to remove the first element, so we can simply make the head point to the next element instead. But will that be enough? No, we also have to reduce the value of size.
You can see that now head points address 6k and the size is 4. But can we consider it deleted? Well to understand that let's answer this question first. Can we anyhow get the node with the value 10? For explanation purposes, I assumed that the address of that node is 5k but in real life, we will not know that. So in a way, we can never recover that element. Hence we can consider that the node is deleted. Also keep in mind that if the Linked List has just 1 node, then we will make both the head and tail null.
But is that all? Any edge cases that come to your mind? Yes, what if the list is already empty. We can handle that separately. So the pseudocode is: