w3resource

Rust Program: Remove duplicates from singly linked list

Rust Linked Lists: Exercise-9 with Solution

Write a Rust program to remove duplicates from an unsorted singly linked list.

Sample Solution:

Rust Code:

use std::collections::HashSet;

// Define the singly linked list node
pub struct Node {
    val: T,
    next: Option>>,
}

// Define the linked list
pub struct LinkedList {
    head: Option>>,
}

impl LinkedList {
    // Function to remove duplicates from the linked list
    pub fn remove_dupes(&mut self) {
        // Create a HashSet to store unique elements
        let mut set = HashSet::new();
        // Initialize a mutable reference to the head of the linked list
        let mut current = &mut self.head;

        // Iterate through the linked list
        while let Some(mut node) = current.take() {
            // If the current node's value is found in the HashSet, remove it
            if set.contains(&node.val) {
                *current = node.next.take();
            } else {
                // Insert the current node's value into the HashSet
                set.insert(node.val.clone());
                // Re-insert the current node back into the linked list
                *current = Some(node);
                // Move the reference to the next node
                current = &mut current.as_mut().unwrap().next;
            }
        }
    }
}

fn main() {
    // Example usage
    let mut list = LinkedList {
        head: Some(Box::new(Node {
            val: 1,
            next: Some(Box::new(Node {
                val: 2,
                next: Some(Box::new(Node {
                    val: 1,
                    next: None,
                })),
            })),
        })),
    };
    // Remove duplicates from the list
    list.remove_dupes();

    // Print the modified list
    let mut current = &list.head;
    while let Some(node) = current {
        println!("{}", node.val);
        current = &node.next;
    }
}

Output:

1
2

Explanation:

Here is a brief explanation of the above Rust code:

  • Node and LinkedList Structs:
    • The Node<T> struct represents a node in a singly linked list, containing a value of type T and an optional pointer to the next node.
    • The LinkedList<T> struct represents the linked list itself, containing an optional pointer to the head node.
  • remove_dupes Method:
    • This method belongs to the "LinkedList" struct and is used to remove duplicate elements from the linked list.
    • It utilizes a HashSet to keep track of unique elements encountered so far.
    • It iterates through the linked list using mutable references and removes duplicate nodes by updating pointers accordingly.
  • Main Function:
    • In the main function, an example linked list is created with some duplicate elements.
    • The "remove_dupes()" method is called to remove duplicates from the list.
    • Finally, the modified list is printed to verify that duplicates have been removed.
  • Explanation of Usage:
    • The "remove_dupes()" method efficiently removes duplicates from the linked list while preserving the order of elements.
    • It achieves this by using a HashSet to track unique elements and updating the linked list in-place.
    • This approach has a time complexity of O(n), where n is the number of elements in the linked list.

Rust Code Editor:

Previous: Rust Program: Merge sorted singly linked lists.

What is the difficulty level of this exercise?

Test your Programming skills with w3resource's quiz.



Become a Patron!

Follow us on Facebook and Twitter for latest update.

It will be nice if you may share this link in any developer community or anywhere else, from where other developers may find this content. Thanks.

https://w3resource.com/rust/collections_and_data_structures/rust-linked-lists-exercise-9.php