Удалить все неосновные узлы из односвязного списка
Опубликовано: 5 Января, 2022
Учитывая односвязный список, содержащий N узлов, задача состоит в том, чтобы удалить из списка все узлы, которые не являются простыми.
Примеры:
Input : List = 15 -> 16 -> 6 -> 7 -> 17
Output : Final List = 7 -> 17
Input : List = 15 -> 3 -> 4 -> 2 -> 9
Output : Final List = 3 ->2
Рекомендуется: сначала попробуйте свой подход в {IDE}, прежде чем переходить к решению.
Подход : идея состоит в том, чтобы обойти узлы односвязного списка один за другим и получить указатель на узлы, которые не являются простыми. Удалите эти узлы, следуя подходу, использованному в публикации: Удалите узел из связанного списка.
Ниже представлена реализация вышеизложенной идеи:
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 { data; int 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 << "
Modified List: " ; printList(head); } |
Джава
// Java implementation to delete all // non-prime nodes from the singly // linked list class GFG { // Node of the singly linked list static class Node { data; int 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( "
Modified 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 ( "
Modified 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 data; int 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( "
Modified 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 {
РЕКОМЕНДУЕМЫЕ СТАТЬИ |