Singly linked list is a collection of nodes that collectively form a linear sequence. In a singly linked list, each node stores data, and as well as a reference to the next node of the list.
Implementation
The linked list instance must keep a reference to the first node of the list, known as the head. If linked
list is empty, then value of head is null
.
Our implementation also takes advantage of Java’s support for nested classes, as we define a private
Node
class within the scope of the public
SinglyLinkedList
class. Having
Node
as a nested class provides strong encapsulation, shielding users of our class from the
underlying details about nodes and links.
public class SinglyLinkedList<E> { // instance variables of the SinglyLinkedList private Node<E> head = null; // head node of the list (or null if empty) // ---------------- nested Node class ---------------- private static class Node<E> { private E data; private Node<E> next; public Node(E data) { this.data = data; } } // ----------- end of nested Node class ----------- }
Let's create first simple singly linked list with 3 nodes.
public class SinglyLinkedList<E> { // instance variables of the SinglyLinkedList private Node<E> head = null; // head node of the list (or null if empty) // ---------------- nested Node class ---------------- private static class Node<E> { private E data; private Node<E> next; public Node(E data) { this.data = data; } } // ----------- end of nested Node class ----------- /* method to create a simple linked list with 3 nodes*/ public static void main(String[] args) { /* Start with the empty list. */ SinglyLinkedList<Integer> singlyLinkedList = new SinglyLinkedList<Integer>(); // creates 3 nodes Node<Integer> first = new Node<Integer>(10); Node<Integer> second = new Node<Integer>(20); Node<Integer> third = new Node<Integer>(30); // Three nodes have been allocated dynamically. // and references to these three blocks as first, // second and third. // // first second third // | | | // | | | // +----+------+ +----+------+ +----+------+ // | 10 | | | 20 | null | | 30 | null | // +----+------+ +----+------+ +----+------+ // lets assign reference of first to head of singly linked list singlyLinkedList.head = first; // Singly linked list head is referencing to first node // // singlyLinkedList.head // and // first second third // | | | // | | | // +----+------+ +----+------+ +----+------+ // | 10 | | | 20 | null | | 30 | null | // +----+------+ +----+------+ +----+------+ // assign reference of second node to next of first first.next = second; // Now next of first Node refers to second. So they // both are linked. // // singlyLinkedList.head second third // | | | // | | | // +----+------+ +----+------+ +----+------+ // | 10 | -------->| 20 | null | | 30 | null | // +----+------+ +----+------+ +----+------+ * second.next = third; // Link second node with the third node // Now next of second Node refers to third. So all three // nodes are linked. // // singlyLinkedList.head second third // | | | // | | | // +----+------+ +----+------+ +----+------+ // | 10 | -------->| 20 | -------->| 30 | null | // +----+------+ +----+------+ +----+------+ } }
Traversal of singly linked list
In the previous example we have created a singly linked list with three nodes. Now we will write a method to
traverse over a linked list and print the data of the list. Let's give method name as printList
.
public class SinglyLinkedList<E> { // instance variables of the SinglyLinkedList private Node<E> head = null; // head node of the list (or null if empty) // ---------------- nested Node class ---------------- private static class Node<E> { private E data; private Node<E> next; public Node(E data) { this.data = data; } } // ----------- end of nested Node class ----------- // instance method of Singly linked list //which will print the data of nodes starting from the head. private void printList() { Node<E> current = this.head; while (current != null) { System.out.print(current.data + "--->"); current = current.next; } System.out.println("null"); } // method to create a simple linked list with 3 nodes public static void main(String[] args) { // Start with the empty list. SinglyLinkedList<Integer> singlyLinkedList = new SinglyLinkedList<Integer>(); // creates 3 nodes Node<Integer> first = new Node<Integer>(10); Node<Integer> second = new Node<Integer>(20); Node<Integer> third = new Node<Integer>(30); // lets assign reference of first to head of singly linked list singlyLinkedList.head = first; // assign reference of second node to next of first first.next = second; // assign reference of third node to next of second second.next = third; // print the elements of the linked list singlyLinkedList.printList(); } }
No comments :
Post a Comment