Each different data structure has a specific strength and weakness. That is why there is not a single data structure but we have quite a few different ones and a few different categories of them, namely you have Lists (order of elements matters, can have duplicates), Set (order of elements does not matter, cannot have duplicates), Map (stores ordered pairs (Key, Value), keys are unique, cannot have duplicate keys) and finally Queue (usually you add elements only to the back, and take elements either from the back or the front, generally you have 2 kinds of queues FIFO and LIFO, that would data structures in a nutschell.
What is the purpose of LinkedList?
Notice it is a List, soo you have a "list" of elements where their order matters and you can have duplicate entries(same value at different locations).
Are you familiar with arrays? Let's say you would like to make a list of your favorite bands
String[] favBands = {"U2","Franz Ferdinand","The Killers","The Strokes"};
notice this is just an array, you cannot add new entries or delete them but you can change them e.g.
favBands[1] = "The Divine Requiem";
but for the list data structures, you want to be able to
add entries at any particular location
delete entries at any particular location
change entries at any partucular location
Are you familiar with ArrayList or his older brother Vector?
It is a list that uses an array to store entries. But notice
when you add an entry let say at the middle what has to be done? You have
0:"U2"
1:"Franz Ferdinand"
2:"The Killers"
3:"The Strokes"
to add an entry at the middle let say at position 2, we need to allocate a new array with the size of current elements + 1, copy first the elements before the insertion point, put in the new element and copy the rest of the elements. That is what ArrayList does because of that reason you have the optional parameter of setting the initial size of the array e.g.
ArrayList<String> favBands = new ArrayList<String>(100);
now the favBands will expect that we add 100 entires soo if we will be adding to the end of the arraylist it will not make a new array until we want to add 101st element. Ofcorse if we put 50 elements and try to insert let's say in somewhere in the middle(position 25) it will have to do some copy work.
Soo adding in the middle or at the front is not very recommended using ArrayList. Same goes for removing elements.
For that reason there is LinkedList it enables efficient insertion and removal of elemenets at any location including the front and the middle.
How is that achieved? Using Links. Each element knows which entry is in front of them and which entry is behind them. Soo if you want to add an entry you simply modify the links, the remove you do similar job. Soo there is no array behind the LinkedList that would need to be recreated and copied and stuff almost everytime you add an entry at an arbitrary position. But as any data structure the LinkedList has it drawbacks and that is to access an entry at a particular location let say get(25) will have to traverse all the links before the position to find it. Soo accessing the link at an arbitrary location is not very efficient at the LinkedList. Maybe you can try implementing your own ArrayList for starters and then LinkedList.
I would recommend the Big Java book by Horstmann it has 3 chapters on Data Structures that explain the basics and some more advnaced things of Data Structures.