Eliminar todos los Nodes no primarios de una lista vinculada individualmente

Dada una lista enlazada individualmente que contiene N Nodes, la tarea es eliminar todos los Nodes de la lista que no son primos.
Ejemplos: 
 

Entrada: Lista = 15 -> 16 -> 6 -> 7 -> 17 
Salida: Lista final = 7 -> 17
Entrada: Lista = 15 -> 3 -> 4 -> 2 -> 9 
Salida: Lista final = 3 – >2 
 

Enfoque : La idea es recorrer los Nodes de la lista enlazada individualmente uno por uno y obtener el puntero de los Nodes que no son primos . Elimine esos Nodes siguiendo el enfoque utilizado en la publicación: Eliminar un Node de la lista vinculada .
A continuación se muestra la implementación de la idea anterior: 
 

C++

// C++ implementation to delete all
// non-prime nodes from the singly
// linked list
#include <bits/stdc++.h>
 
using namespace std;
 
// Node of the singly linked list
struct Node {
    int data;
    Node* next;
};
 
// function to insert a node at the beginning
// of the singly Linked List
void push(Node** head_ref, int new_data)
{
    Node* new_node = new Node;
    new_node->data = new_data;
    new_node->next = (*head_ref);
    (*head_ref) = new_node;
}
 
// Function to check if a number is prime
bool isPrime(int n)
{
    // Corner cases
    if (n <= 1)
        return false;
    if (n <= 3)
        return true;
 
    // This is checked so that we can skip
    // middle five numbers in below loop
    if (n % 2 == 0 || n % 3 == 0)
        return false;
 
    for (int i = 5; i * i <= n; i = i + 6)
        if (n % i == 0 || n % (i + 2) == 0)
            return false;
 
    return true;
}
 
// function to delete all non-prime nodes
// from the singly linked list
void deleteNonPrimeNodes(Node** head_ref)
{
    // Remove all composite nodes at the beginning
    Node* ptr = *head_ref;
    while (ptr != NULL && !isPrime(ptr->data))
    {
       Node *temp = ptr;
       ptr = ptr->next;
       delete(temp);
    }
    *head_ref = ptr;
    if (ptr == NULL)
       return;
 
    // Remove remaining nodes
    Node *curr = ptr->next;
    while (curr != NULL) {
 
        if (!isPrime(curr->data))
        {
            ptr->next = curr->next;
            delete(curr);
            curr = ptr->next;
        }
        else
        {
            ptr = curr;
            curr = curr->next;
        }
     }   
}
 
// function to print nodes in a
// given singly linked list
void printList(Node* head)
{
    while (head != NULL) {
        cout << head->data << " ";
        head = head->next;
    }
}
 
// Driver program
int main()
{
    // start with the empty list
    Node* head = NULL;
 
    // create the linked list
    // 15 -> 16 -> 7 -> 6 -> 17
    push(&head, 17);
    push(&head, 7);
    push(&head, 6);
    push(&head, 16);
    push(&head, 15);
 
    cout << "Original List: ";
    printList(head);
 
    deleteNonPrimeNodes(&head);
 
    cout << "\nModified List: ";
    printList(head);
}

Java

// Java implementation to delete all
// non-prime nodes from the singly
// linked list
class GFG
{
     
// Node of the singly linked list
static class Node
{
    int data;
    Node next;
};
 
// function to insert a node at the beginning
// of the singly Linked List
static Node push(Node head_ref, int new_data)
{
    Node new_node = new Node();
    new_node.data = new_data;
    new_node.next = (head_ref);
    (head_ref) = new_node;
    return head_ref;
}
 
// Function to check if a number is prime
static boolean isPrime(int n)
{
    // Corner cases
    if (n <= 1)
        return false;
    if (n <= 3)
        return true;
 
    // This is checked so that we can skip
    // middle five numbers in below loop
    if (n % 2 == 0 || n % 3 == 0)
        return false;
 
    for (int i = 5; i * i <= n; i = i + 6)
        if (n % i == 0 || n % (i + 2) == 0)
            return false;
 
    return true;
}
 
// function to delete all non-prime nodes
// from the singly linked list
static Node deleteNonPrimeNodes(Node head_ref)
{
    // Remove all composite nodes at the beginning
    Node ptr = head_ref;
    while (ptr != null && !isPrime(ptr.data))
    {
        Node temp = ptr;
        ptr = ptr.next;
    }
    head_ref = ptr;
    if (ptr == null)
        return null;
 
    // Remove remaining nodes
    Node curr = ptr.next;
    while (curr != null)
    {
 
        if (!isPrime(curr.data))
        {
            ptr.next = curr.next;
            curr = ptr.next;
        }
        else
        {
            ptr = curr;
            curr = curr.next;
        }
    }
    return head_ref;
}
 
// function to print nodes in a
// given singly linked list
static void printList(Node head)
{
    while (head != null)
    {
        System.out.print(head.data + " ");
        head = head.next;
    }
}
 
// Driver code
public static void main(String args[])
{
    // start with the empty list
    Node head = null;
 
    // create the linked list
    // 15 . 16 . 7 . 6 . 17
    head = push(head, 17);
    head = push(head, 7);
    head = push(head, 6);
    head = push(head, 16);
    head = push(head, 15);
 
    System.out.print("Original List: ");
    printList(head);
 
    head = deleteNonPrimeNodes(head);
 
    System.out.print("\nModified List: ");
    printList(head);
}
}
 
// This code is contributed by Arnab Kundu

Python3

# Python3 implementation to delete all
# non-prime nodes from the singly
# linked list
import math
 
# Node of the singly linked list
class Node:
    def __init__(self, data):
        self.data = data
        self.next = None
 
# function to insert a node at the beginning
# of the singly Linked List
def push(head_ref, new_data):
    new_node = Node(new_data)
    new_node.data = new_data
    new_node.next = head_ref
    head_ref = new_node
    return head_ref
 
# Function to check if a number is prime
def isPrime(n):
     
    # Corner cases
    if (n <= 1):
        return False
    if (n <= 3):
        return True
 
    # This is checked so that we can skip
    # middle five numbers in below loop
    if (n % 2 == 0 or n % 3 == 0):
        return False
    for i in range(5, n + 1, 6):
        if (i * i < n + 2 and
           (n % i == 0 or n % (i + 2) == 0)):
            return False
         
    return True
 
# function to delete all non-prime nodes
# from the singly linked list
def deleteNonPrimeNodes(head_ref):
     
    # Remove all composite nodes at the beginning
    ptr = head_ref
    while (ptr != None and
           isPrime(ptr.data)!= True):
        temp = ptr
        ptr = ptr.next
        # delete(temp)
     
    head_ref = ptr
    if (ptr == None):
        return None
 
    # Remove remaining nodes
    curr = ptr.next
    while (curr != None) :
 
        if (isPrime(curr.data) != True):
            ptr.next = curr.next
            #delete(curr)
            curr = ptr.next
         
        else:
            ptr = curr
            curr = curr.next
         
        return head_ref    
 
# function to print nodes in a
# given singly linked list
def printList( head):
    while (head != None) :
        print(head.data, end = " ")
        head = head.next
     
# Driver Code
if __name__=='__main__':
 
    # start with the empty list
    head = None
 
    # create the linked list
    # 15 -> 16 -> 7 -> 6 -> 17
    head = push(head, 17)
    head = push(head, 7)
    head = push(head, 6)
    head = push(head, 16)
    head = push(head, 15)
 
    print("Original List: ")
    printList(head)
 
    head = deleteNonPrimeNodes(head)
 
    print("\nModified List: ")
    printList(head)
 
# This code is contributed by AbhiThakur

C#

// C# implementation to delete all
// non-prime nodes from the singly
// linked list
using System;
 
class GFG
{
 
    // Node of the singly linked list
    public class Node
    {
        public int data;
        public Node next;
    };
 
    // function to insert a node at the beginning
    // of the singly Linked List
    static Node push(Node head_ref, int new_data)
    {
        Node new_node = new Node();
        new_node.data = new_data;
        new_node.next = (head_ref);
        (head_ref) = new_node;
        return head_ref;
    }
 
    // Function to check if a number is prime
    static bool isPrime(int n)
    {
        // Corner cases
        if (n <= 1)
        {
            return false;
        }
        if (n <= 3)
        {
            return true;
        }
 
        // This is checked so that we can skip
        // middle five numbers in below loop
        if (n % 2 == 0 || n % 3 == 0)
        {
            return false;
        }
 
        for (int i = 5; i * i <= n; i = i + 6)
        {
            if (n % i == 0 || n % (i + 2) == 0)
            {
                return false;
            }
        }
        return true;
    }
 
    // function to delete all non-prime nodes
    // from the singly linked list
    static Node deleteNonPrimeNodes(Node head_ref)
    {
        // Remove all composite nodes
        // at the beginning
        Node ptr = head_ref;
        while (ptr != null && !isPrime(ptr.data))
        {
            Node temp = ptr;
            ptr = ptr.next;
        }
        head_ref = ptr;
        if (ptr == null)
        {
            return null;
        }
 
        // Remove remaining nodes
        Node curr = ptr.next;
        while (curr != null)
        {
            if (!isPrime(curr.data))
            {
                ptr.next = curr.next;
                curr = ptr.next;
            }
            else
            {
                ptr = curr;
                curr = curr.next;
            }
        }
        return head_ref;
    }
 
    // function to print nodes in a
    // given singly linked list
    static void printList(Node head)
    {
        while (head != null)
        {
            Console.Write(head.data + " ");
            head = head.next;
        }
    }
 
    // Driver code
    public static void Main(String[] args)
    {
        // start with the empty list
        Node head = null;
 
        // create the linked list
        // 15 . 16 . 7 . 6 . 17
        head = push(head, 17);
        head = push(head, 7);
        head = push(head, 6);
        head = push(head, 16);
        head = push(head, 15);
 
        Console.Write("Original List: ");
        printList(head);
 
        head = deleteNonPrimeNodes(head);
 
        Console.Write("\nModified List: ");
        printList(head);
    }
}
 
// This code is contributed by 29AjayKumar

Javascript

<script>
// javascript implementation to delete all
// non-prime nodes from the singly
// linked list    // Node of the singly linked list
class Node {
    constructor() {
        this.data = 0;
        this.next = null;
    }
}
    // function to insert a node at the beginning
    // of the singly Linked List
    function push(head_ref , new_data) {
var new_node = new Node();
        new_node.data = new_data;
        new_node.next = (head_ref);
        (head_ref) = new_node;
        return head_ref;
    }
 
    // Function to check if a number is prime
    function isPrime(n) {
        // Corner cases
        if (n <= 1)
            return false;
        if (n <= 3)
            return true;
 
        // This is checked so that we can skip
        // middle five numbers in below loop
        if (n % 2 == 0 || n % 3 == 0)
            return false;
 
        for (i = 5; i * i <= n; i = i + 6)
            if (n % i == 0 || n % (i + 2) == 0)
                return false;
 
        return true;
    }
 
    // function to delete all non-prime nodes
    // from the singly linked list
    function deleteNonPrimeNodes(head_ref) {
        // Remove all composite nodes at the beginning
var ptr = head_ref;
        while (ptr != null && !isPrime(ptr.data)) {
    var temp = ptr;
            ptr = ptr.next;
        }
        head_ref = ptr;
        if (ptr == null)
            return null;
 
        // Remove remaining nodes
var curr = ptr.next;
        while (curr != null) {
 
            if (!isPrime(curr.data)) {
                ptr.next = curr.next;
                curr = ptr.next;
            } else {
                ptr = curr;
                curr = curr.next;
            }
        }
        return head_ref;
    }
 
    // function to print nodes in a
    // given singly linked list
    function printList(head) {
        while (head != null) {
            document.write(head.data + " ");
            head = head.next;
        }
    }
 
    // Driver code
     
        // start with the empty list
var head = null;
 
        // create the linked list
        // 15 . 16 . 7 . 6 . 17
        head = push(head, 17);
        head = push(head, 7);
        head = push(head, 6);
        head = push(head, 16);
        head = push(head, 15);
 
        document.write("Original List: ");
        printList(head);
 
        head = deleteNonPrimeNodes(head);
 
        document.write("<br/>Modified List: ");
        printList(head);
 
// This code contributed by aashish1995
</script>
Producción: 

Original List: 15 16 6 7 17 
Modified List: 7 17

 

Complejidad de tiempo : O (N * sqrt (MAX)) donde N es el número total de Nodes en la lista vinculada y MAX es el elemento máximo en la array.
Espacio Auxiliar : O(1)

Publicación traducida automáticamente

Artículo escrito por gfg_sal_gfg y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *