I am having a hard time trying to explain how this works because it is backwards.
You are putting thee next node in front of the original "start: and changing the address of "start". "start" should be the first node with an address that never changes. Each new node would then come after start so that everything is in the correct order.
The "display" function works, but since the linked list is backwards it prints correctly, but in reverse order from what you entered.
I will work on something that is more of what is generally done that I can explain to you.
There's nothing unusual or "backwards" about this implementation (besides the unnecessary use of globals). A singly linked list that inserts at the head is absolutely common. For example, the most basic lists in functional languages such as List and Haskell behave like this.