Ok..the thing is..when you want to display the list ,you have to traverse the list from the beginning(in a loop), and display each element until end of list is reached.
What you are doing will only display current data that you have entered.
Basically, linked list are dynamic in nature. Hence , your code for(int i=0; i<3; i++) is not suitable for linked list ,since it restricts its size to 3.
Anyway, because you are still new at it. Let us solve your first problem here. Let us for now assume that linked list can have maximum 3 elements and continue with your code for the time being.
Now , you need a loop inside your loop, that traverses the list, and cout all elements one by one.p -> next = NULL;
With this you are not creating a linkedlist at all. In linked list , an element's next points to some other element and so on and thus a list is formed. Here since you are assigning null, your element points to nothing, its an individual struct variable, not a part of the linked list.
I would suggest read some theory on linked list first and then start coding. Once you understand the concept ,it will be much easier