I was going through the LinkedList and seen the implementation in Java. Back in days when I tried and implemented the linkedlist, it was with pointers and addresses and a lot of hard work. With Java the implementation is easier but still took some doing on my part. What I know of linked list is clear from following diagram,where 1,2,3,4 are nodes of the linkedlist.
However In java, the code I came across made me to think of the LinkedList as following diagram.
The implementation code of linkedlist in Java is as follows,
class LinkedListNode
{
LinkedListNode nextNode = null;//consider this member variable
int data;
public LinkedListNode(int data)
{
this.data = data;
}
void appendItemToLinkedList(int newData)
{
LinkedListNode end = new LinkedListNode(newData);
LinkedListNode temp = this;
while (temp.nextNode != null) { temp = temp.nextNode; }
temp.nextNode = end;
}
}
and
public static void main(String[] args)
{
LinkedListNode list = new LinkedListNode(10);
list.appendItemToLinkedList(20);
list.appendItemToLinkedList(30);
list.appendItemToLinkedList(40);
list.appendItemToLinkedList(50);
list.appendItemToLinkedList(60);
}
In the diagram , you can clearly see the node objects are inside the other node objects. Is it really a linked list.Or A parent container holding other container inside it and so on?
The second diagram results from thinking that one list contains another (as it would if the LinkedList
type were a primitive type).
The first diagram results when you think about one LinkedList
referencing another.
Because LinkedList
is a reference type, and not a primitive type, the nextNode
field does not store a full LinkedList
in-place, but only a reference to one. Therefore, your first diagram is the correct one, even in Java.
See also:
This other question, "What's the difference between primitive and reference types?"
Java language specification: Chapter 4.1, "Kinds of Types and Values"
The implementations of Linked-List in Java and in C++ are actually pretty similar. The only difference is the natural difference caused by the different language. In both you'll have an entity (class) for LinkedListNode. In both this class will have a field next
which will be a reference in Java, or a pointer in C++, to the next node. The insertion method will look the same too. So overall, it's just similar :)
And the diagram that fits this design is of course the first one.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With