Eliminar Nodes de listas vinculadas que tienen un valor menor en el lado izquierdo

Dada una lista enlazada individualmente, la tarea es eliminar todos los Nodes que tienen un valor menor en el lado izquierdo.
Ejemplos: 
 

Input: 12->15->10->11->5->6->2->3
Output: Modified Linked List = 12 -> 10 -> 5 -> 2 

Input: 25->15->6->48->12->5->16->14
Output: Modified Linked List = 25 -> 15 -> 6 -> 5   

Acercarse:
 

  1. Inicialice un máximo variable con el Node principal.
  2. Recorre la lista.
  3. Compruebe si el siguiente Node es menor que max_node. En caso afirmativo, pase al siguiente Node.
  4. De lo contrario, si no, actualice el valor de max_node y elimine el siguiente Node.

A continuación se muestra la implementación del enfoque anterior: 
 

C++

// C++ implementation of above approach
#include <bits/stdc++.h>
using namespace std;
  
// Structure of a linked list node
struct Node {
    int data;
    struct Node* next;
};
  
// Function to Delete nodes which have
// greater value node(s) on right side
void delNodes(struct Node* head)
{
    struct Node* current = head;
  
    // Initialize max
    struct Node* maxnode = head;
    struct Node* temp;
  
    while (current != NULL && current->next != NULL) {
  
        // If current is greater than max,
        // then update max and move current
        if (current->next->data <= maxnode->data) {
            current = current->next;
            maxnode = current;
        }
  
        // If current is smaller than max, then delete current
        else {
            temp = current->next;
            current->next = temp->next;
            free(temp);
        }
    }
}
  
/* Utility function to insert a node at the beginning */
void push(struct Node** head_ref, int new_data)
{
    struct Node* new_node = new Node;
    new_node->data = new_data;
    new_node->next = *head_ref;
    *head_ref = new_node;
}
  
/* Utility function to print a linked list */
void printList(struct Node* head)
{
    while (head != NULL) {
        cout << head->data << " ";
        head = head->next;
    }
    cout << endl;
}
  
/* Driver program to test above functions */
int main()
{
    struct Node* head = NULL;
  
    /* Create following linked list 
    12->15->10->11->5->6->2->3 */
    push(&head, 3);
    push(&head, 2);
    push(&head, 6);
    push(&head, 5);
    push(&head, 11);
    push(&head, 10);
    push(&head, 15);
    push(&head, 12);
  
    printf("Given Linked List: ");
    printList(head);
  
    delNodes(head);
  
    printf("\nModified Linked List: ");
    printList(head);
  
    return 0;
}

Java

// Java implementation of above approach 
class Solution
{
  
// Structure of a linked list node 
static class Node 
{ 
    int data; 
    Node next; 
}; 
  
// Function to Delete nodes which have 
// greater value node(s) on right side 
static Node delNodes(Node head) 
{ 
    Node current = head; 
  
    // Initialize max 
    Node maxnode = head; 
    Node temp; 
  
    while (current != null && current.next != null)
    { 
  
        // If current is lesser than max, 
        // then update max and move current 
        if (current.next.data <= maxnode.data) 
        { 
            current = current.next; 
            maxnode = current; 
        } 
  
        // If current is greater than max, then delete current 
        else
        { 
            temp = current.next; 
            current.next = temp.next; 
        } 
    } 
    return head;
} 
  
  
// Utility function to insert a node at the beginning /
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;
} 
  
// Utility function to print a linked list /
static Node printList(Node head) 
{ 
    while (head != null)
    { 
        System.out.print( head.data + " "); 
        head = head.next; 
    } 
    System.out.println();
    return head;
} 
  
// Driver program to test above functions /
public static void main(String args[]) 
{ 
    Node head = null; 
  
    /* Create following linked list 
    12->15->10->11->5->6->2->3 */
    head=push(head, 3); 
    head=push(head, 2); 
    head=push(head, 6); 
    head=push(head, 5); 
    head=push(head, 11); 
    head=push(head, 10); 
    head=push(head, 15); 
    head=push(head, 12); 
  
    System.out.printf("Given Linked List \n"); 
    printList(head); 
  
    head=delNodes(head); 
  
    System.out.printf("Modified Linked List \n"); 
    printList(head); 
}
} 
  
// This code is contributed by Arnab Kundu

Python3

# Python implementation of above approach
import math
  
# Structure of a linked list node
class Node: 
    def __init__(self, data): 
        self.data = data 
        self.next = None
  
# Function to Delete nodes which have
# greater value node(s) on right side
def delNodes(head):
    current = head
  
    # Initialize max
    maxnode = head
    temp = None
  
    while (current != None and current.next != None):
  
        # If current is greater than max,
        # then update max and move current
        if (current.next.data <= maxnode.data):
            current = current.next
            maxnode = current
          
        # If current is smaller than max, 
        # then delete current
        else:
            temp = current.next
            current.next = temp.next
            #free(temp)
      
# Utility function to insert a node at the beginning 
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
  
# Utility function to print a linked list 
def printList(head):
    while (head != None) :
        print(head.data, end = " ")
        head = head.next
    print()
      
# Driver Code
if __name__=='__main__': 
    head = None
  
    # Create following linked list 
    # 12.15.10.11.5.6.2.3 
    head = push(head, 3)
    head = push(head, 2)
    head = push(head, 6)
    head = push(head, 5)
    head = push(head, 11)
    head = push(head, 10)
    head = push(head, 15)
    head = push(head, 12)
  
    print("Given Linked List: ", end = "")
    printList(head)
  
    delNodes(head)
  
    print("\nModified Linked List: ", end = "")
    printList(head)
  
# This code is contributed by AbhiThakur

C#

// C# implementation of the above approach: 
using System;
class GFG
{
  
// Structure of a linked list node 
public class Node 
{ 
    public int data; 
    public Node next; 
}; 
  
// Function to Delete nodes which have 
// greater value node(s) on right side 
static Node delNodes(Node head) 
{ 
    Node current = head; 
  
    // Initialize max 
    Node maxnode = head; 
    Node temp; 
  
    while (current != null &&
           current.next != null)
    { 
  
        // If current is lesser than max, 
        // then update max and move current 
        if (current.next.data <= maxnode.data) 
        { 
            current = current.next; 
            maxnode = current; 
        } 
  
        // If current is greater than max, 
        // then delete current 
        else
        { 
            temp = current.next; 
            current.next = temp.next; 
        } 
    } 
    return head;
} 
  
// Utility function to insert 
// a node at the beginning 
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;
} 
  
// Utility function to print a linked list 
static Node printList(Node head) 
{ 
    while (head != null)
    { 
        Console.Write(head.data + " "); 
        head = head.next; 
    } 
    Console.WriteLine();
    return head;
} 
  
// Driver Code
public static void Main(String []args) 
{ 
    Node head = null; 
  
    /* Create following linked list 
    12->15->10->11->5->6->2->3 */
    head = push(head, 3); 
    head = push(head, 2); 
    head = push(head, 6); 
    head = push(head, 5); 
    head = push(head, 11); 
    head = push(head, 10); 
    head = push(head, 15); 
    head = push(head, 12); 
  
    Console.Write("Given Linked List \n"); 
    printList(head); 
  
    head = delNodes(head); 
  
    Console.Write("Modified Linked List \n"); 
    printList(head); 
}
} 
  
// This code is contributed by PrinciRaj1992 

Javascript

<script>
  
// JavaScript implementation of above approach 
  
  
    // Structure of a linked list node
     class Node {
            constructor(val) {
                this.data = val;
                this.next = null;
            }
        }
    // Function to Delete nodes which have
    // greater value node(s) on right side
    function delNodes(head) {
    var current = head;
  
        // Initialize max
      var maxnode = head;
      var temp;
  
        while (current != null && current.next != null) {
  
            // If current is lesser than max,
            // then update max and move current
            if (current.next.data <= maxnode.data) {
                current = current.next;
                maxnode = current;
            }
  
            // If current is greater than max, 
            // then delete current
            else {
                temp = current.next;
                current.next = temp.next;
            }
        }
        return head;
    }
  
    // Utility function to insert a
    // node at the beginning /
    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;
    }
  
    // Utility function to print a linked list /
    function printList(head) {
        while (head != null) {
            document.write(head.data + " ");
            head = head.next;
        }
        document.write();
        return head;
    }
  
    // Driver program to test above functions /
      
       var head = null;
  
        /*
         * Create following linked list 
         12->15->10->11->5->6->2->3
         */
        head = push(head, 3);
        head = push(head, 2);
        head = push(head, 6);
        head = push(head, 5);
        head = push(head, 11);
        head = push(head, 10);
        head = push(head, 15);
        head = push(head, 12);
  
        document.write("Given Linked List ");
        printList(head);
  
        head = delNodes(head);
  
        document.write("<br/><br/>Modified Linked List ");
        printList(head);
  
// This code contributed by umadevi9616 
  
</script>
Producción: 

Given Linked List: 12 15 10 11 5 6 2 3 

Modified Linked List: 12 10 5 2

 

Complejidad temporal: O(N), donde N es el número total de Nodes.

Espacio Auxiliar: O(1)
 

Publicación traducida automáticamente

Artículo escrito por Rajput-Ji 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 *