Elimine los Nodes de la lista vinculada que tienen un valor mayor en el lado izquierdo

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

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

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

Acercarse: 
 

  1. Inicialice el máximo con el Node principal.
  2. Recorre la lista.
  3. Compruebe si el siguiente Node es mayor que max_node, luego actualice el valor de max_node y pase al siguiente Node.
  4. De lo contrario, 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 \n");
    printList(head);
 
    delNodes(head);
 
    printf("Modified Linked List \n");
    printList(head);
 
    return 0;
}

Java

// Java implementation of above approach
class GFG
{
 
// 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 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;
        }
    }
    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 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);
 
    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

# Python3 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
 
    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)
         
    return head
 
# 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()
    return head
 
# 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")
    printList(head)
 
    head = delNodes(head)
 
    print("Modified Linked List")
    printList(head)
 
# This code is contributed by Srathore

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 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;
        }
    }
    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 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;
            }
        }
        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 code
     
     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 <br/>");
        printList(head);
 
        head = delNodes(head);
 
        document.write("<br/>Modified Linked List <br/>");
        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 15

 

Complejidad de tiempo : O(n)

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 *