Skip to main content

LinkedList in Java

  • A LinkedList is a linear data structure where elements are stored in nodes, and each node points to the next node in the sequence.

  • Unlike arrays or ArrayLists, LinkedLists don't store elements in contiguous memory locations.

  • Instead, each element is represented by a node containing both the data and a reference (or link) to the next node in the sequence.

  • The last node typically points to null, indicating the end of the list.

linkedlist

Key Features of LinkedList

  • Doubly-Linked List: Each element (node) in a LinkedList contains a reference to both the next and previous element, allowing for efficient insertions and deletions.

  • Dynamic Size: The size of a LinkedList can grow and shrink dynamically as elements are added or removed.

  • Homogeneous Elements: Typically, LinkedList holds elements of a single type, specified when the LinkedList is declared.

  • Indexed Access: Elements can be accessed using their index, although this is less efficient compared to ArrayList.

Importing LinkedList

To use LinkedList, you need to import it from the java.util package.

import java.util.LinkedList;

Creating a LinkedList

You can create a LinkedList using its constructor. You can specify the type of elements it will hold using generics.

LinkedList<String> stringList = new LinkedList<>();
LinkedList<Integer> intList = new LinkedList<>();

Adding Elements to a LinkedList

You can add elements to a LinkedList using the add method. You can add elements at the end, at a specific position, or at the beginning.

stringList.add("Hello"); // Adds to the end
stringList.addFirst("Start"); // Adds to the beginning
stringList.addLast("End"); // Adds to the end
intList.add(10); // Adds to the end
intList.add(1, 20); // Adds 20 at index 1

Accessing Elements in a LinkedList

You can access elements using the get method, which takes the index of the element as an argument.

String firstString = stringList.get(0);
int firstInt = intList.get(0);

System.out.println("First String: " + firstString); // Outputs: First String: Start
System.out.println("First Integer: " + firstInt); // Outputs: First Integer: 10

Modifying Elements in a LinkedList

You can modify elements using the set method, which takes the index and the new value.

stringList.set(0, "Hi");
System.out.println("Modified First String: " + stringList.get(0)); // Outputs: Modified First String: Hi

Removing Elements from a LinkedList

You can remove elements using the remove method, which can take either the index of the element or the element itself.

stringList.remove(1); // Removes the element at index 1
intList.remove(Integer.valueOf(20)); // Removes the element 20

Iterating Over a LinkedList

You can iterate over a LinkedList using a for loop, an enhanced for loop, or an iterator.

Using a For Loop

for (int i = 0; i < stringList.size(); i++) {
System.out.println("Element at index " + i + ": " + stringList.get(i));
}

Using an Enhanced For Loop

for (String element : stringList) {
System.out.println("Element: " + element);
}

Example

Here’s a complete example demonstrating the creation, manipulation, and iteration of a LinkedList in Java:

import java.util.LinkedList;

public class LinkedListExample {
public static void main(String[] args) {
// Create a LinkedList to store Strings
LinkedList<String> stringList = new LinkedList<>();

// Add elements to the LinkedList
stringList.add("Hello");
stringList.addFirst("Start");
stringList.addLast("End");

// Access elements
String firstString = stringList.get(0);
System.out.println("First String: " + firstString); // Outputs: First String: Start

// Modify an element
stringList.set(0, "Hi");
System.out.println("Modified First String: " + stringList.get(0)); // Outputs: Modified First String: Hi

// Remove an element
stringList.remove(1); // Removes the element at index 1

// Iterate over the LinkedList
for (String element : stringList) {
System.out.println("Element: " + element);
}
// Output
//Element: Hi
//Element: End
}
}

Summary

  • Doubly-Linked List: Each node contains references to the next and previous nodes.

  • Dynamic Size: Can grow and shrink dynamically as elements are added or removed.

  • Homogeneous Elements: Typically holds elements of a single type.

  • Indexed Access: Elements can be accessed using their index, though less efficient than ArrayList.

  • Utility Methods: Provides methods for adding, removing, and manipulating elements.

  • Iterating: Can be iterated using for loops or iterators.

LinkedList is a powerful data structure in Java, offering flexibility for dynamic collections of elements with efficient insertions and deletions. Understanding how to use LinkedList effectively is essential for managing complex data structures and operations in Java.