A linked list is a linear data structure, in which the elements are not stored at contiguous memory locations. The given task is to retrieve the first and the last element of a given linked list.
Properties of a Linked List
- Elements are stored in a non-contiguous manner.
- Every element is an object which contains a pointer to the next element.
Example to Get the First and the Last Element of a Linked List
Input: [2, 5, 5, 7, 10, 6]
Output: First element is : 2
Last element is : 6Input: [1]
Output: First element is : 1
Last element is : 1
1. Using in-built libraries
Use the pre-built LinkedList class in the java.util package to build a Linked List and use the pre-defined methods to fetch the respective values.
Below is the implementation of the above approach:
Java
// Java Program to get the first and the last element of a // Linked List // Importing the Linked List class from the util package import java.util.LinkedList; class AccessFirstAndLastElements { public static void main(String[] args) { // Initializing the Linked List LinkedList<Integer> ll = new LinkedList<>(); // Adding elements to the Linked List ll.add( 2 ); ll.add( 5 ); ll.add( 5 ); ll.add( 7 ); ll.add( 10 ); ll.add( 6 ); // Getting the first element System.out.println( "First Element is : " + ll.getFirst()); // Getting the last element System.out.println( "Last Element is : " + ll.getLast()); } } |
First Element is : 2 Last Element is : 6
The complexity of the above method:
Time Complexity: getFirst() takes O(1) time and getLast() takes O(1) time.
Auxiliary Space: O(1), As constant extra space is used.
2. Without using in-built methods
- Create a generic Node class.
- Create our very own Linked List class using the Node class.
- Create the required add(), getFirst() and getLast() methods.
- Initialize the Linked List.
- Use the respective get methods to fetch the values.
Below is the implementation of the above approach:
Java
// Java program to get the first and last element from a // Linked List // A Generic Node class is used to create a Linked List class Node<E> { // Data Stored in each Node of the Linked List E data; // Pointer to the next node in the Linked List Node<E> next; // Node class constructor used to initializes the data // in each Node Node(E data) { this .data = data; } } class LinkedList<E> { // Points to the head of the Linked List // i.e the first element Node<E> head; int size = 0 ; // Addition of elements to the tail of the Linked List public void add(E element) { // Checks whether the head is created else creates a // new one if (head == null ) { head = new Node<>(element); size++; return ; } // The Node which needs to be added at // the tail of the Linked List Node<E> add = new Node<>(element); // Storing the instance of the // head pointer Node<E> temp = head; // The while loop takes us to the tail of the Linked // List while (temp.next != null ) { temp = temp.next; } // New Node is added at the tail of // the Linked List temp.next = add; // Size of the Linked List is incremented as // the elements are added size++; } // Retrieves the first element of the Linked List public E getFirst() throws Exception { // Throws an Exception if the List is empty if (head == null ) { throw new Exception( "No elements found in Linked List" ); } // Returns the first element return head.data; } // Retrieves the last element of the Linked List public E getLast() throws Exception { // Throws an Exception if the List is empty if (head == null ) { throw new Exception( "No elements found in Linked List" ); } Node<E> temp = head; // The while loop takes us to the tail of the Linked // List while (temp.next != null ) { temp = temp.next; } // Returns the last element return temp.data; } } class AccessFirstAndLastElements { public static void main(String[] args) throws Exception { // Initializing the Linked List LinkedList<Integer> ll = new LinkedList<>(); // Adding elements to the Linked List ll.add( 2 ); ll.add( 5 ); ll.add( 5 ); ll.add( 7 ); ll.add( 10 ); ll.add( 6 ); // Getting the first element System.out.println( "First Element is : " + ll.getFirst()); // Getting the last element System.out.println( "Last Element is : " + ll.getLast()); } } |
First Element is : 2 Last Element is : 6
The complexity of the above method:
Time Complexity: O(1)
Auxiliary space: O(1)