Sublista creciente más larga en una lista enlazada

Dada una lista enlazada individualmente, queremos contar los elementos que aumentan continuamente e imprimir la lista enlazada creciente.
Ejemplos: 
 

Input  : 8 -> 5 -> 7 -> 10 -> 9 -> 11 -> 12 -> 13 -> NULL
Output : Number of continuously increasing elements = 4      
         Increasing linked list : 9 11 12 13

Input : 5 -> 12 -> 18 -> 7 -> 12 -> 15 -> NULL
Output : Number of continuously increasing elements = 3
         Increasing linked list = 5 12 18

La idea es recorrer una lista enlazada individualmente y comparar curr->data con curr->next->data donde curr es el Node actual que se está atravesando. Si curr->data es más pequeño que curr->next->data, entonces el puntero de curr apunta a curr->next e incrementa la longitud (elemento de aumento continuo) en uno. Si la condición es falsa, compare la longitud con max y si max es menor que len, asigne el valor de len a max. Continúe este proceso hasta que head no sea igual a NULL. También encuentre el índice inicial del elemento creciente continuo. A continuación, recorra la lista vinculada y muestre el elemento de aumento continuo en la lista vinculada. 
 

C++

// Program to count maximum number of continuous
// increasing element in linked list and display
// the elements of linked list.
#include <bits/stdc++.h>
using namespace std;
 
struct Node {
    int data;
    struct Node* next;
};
 
// Function that count maximum number of continuous
// increasing elements in linked list and display
// the list.
void countIncreasingElements(struct Node *head)
{
    // Traverse the list and keep track of max increasing
    // and current increasing lengths
    int curr_len = 1, max_len = 1;
    int total_count = 1, res_index = 0;
    for (Node *curr=head; curr->next!=NULL; curr=curr->next)
    {
        // Compare head->data with head->next->data
        if (curr->data < curr->next->data)
            curr_len++;
        else
        {
            // compare maximum length with len.
            if (max_len < curr_len)
            {
                max_len = curr_len;
                res_index = total_count - curr_len;
            }
 
            curr_len = 1;
        }
        total_count++;
    }
 
    if (max_len < curr_len)
    {
        max_len = curr_len;
        res_index = total_count - max_len;
    }
 
    // Print the maximum number of continuous elements
    // in linked list.
    cout << "Number of continuously increasing element"
            " in list : ";
    cout << max_len << endl;
 
    // Traverse the list again to print longest increasing
    // sublist
    int i = 0;
    cout << "Increasing linked list" << endl;
    for (Node* curr=head; curr!=NULL; curr=curr->next)
    {
        // compare with starting index and index of
        // maximum increasing elements if both are
        // equals then execute it.
        if (i == res_index)
        {
            // loop until max greater then 0.
            while (max_len > 0)
            {
                // Display the list and temp point
                // to the next element.
                cout << curr->data << " ";
                curr = curr->next;
                max_len--;
            }
            break;
        }
 
        i++;
    }
}
 
// Function to insert an element at the beginning
void push(struct Node** head, int data)
{
    struct Node* newNode = new Node;
    newNode->data = data;
    newNode->next = (*head);
    (*head) = newNode;
}
 
// Display linked list.
void printList(struct Node* node)
{
    while (node != NULL) {
        cout << node->data << " ";
        node = node->next;
    }
    cout << endl;
}
 
// Driver functions
int main()
{
    // Create a node and initialize with NULL
    struct Node* head = NULL;
 
    // push() insert node in linked list.
    // 15 -> 18 -> 5 -> 8 -> 11 -> 12
    push(&head, 12);
    push(&head, 11);
    push(&head, 8);
    push(&head, 5);
    push(&head, 18);
    push(&head, 15);
    cout << "Linked list:" << endl;
    printList(head);
 
    // Function call countIncreasingElements(head)
   // cout << countIncreasingElements(head) << endl;
    countIncreasingElements(head);
    return 0;
}

Java

// A Java Program to count maximum number
// of continuous increasing element in
// linked list and display the elements
// of linked list.
import java.util.*;
class GFG
{
static class Node
{
    int data;
    Node next;
}
static Node head;
 
// Function that count maximum number
// of continuous increasing elements
// in linked list and display the list.
static void countIncreasingElements(Node head)
{
    // Traverse the list and keep track
    // of max increasing and
    // current increasing lengths
    int curr_len = 1, max_len = 1;
    int total_count = 1, res_index = 0;
    for (Node curr = head; curr.next != null;
                           curr = curr.next)
    {
        // Compare head.data with head.next.data
        if (curr.data < curr.next.data)
            curr_len++;
        else
        {
            // compare maximum length with len.
            if (max_len < curr_len)
            {
                max_len = curr_len;
                res_index = total_count - curr_len;
            }
 
            curr_len = 1;
        }
        total_count++;
    }
 
    if (max_len < curr_len)
    {
        max_len = curr_len;
        res_index = total_count - max_len;
    }
 
    // Print the maximum number of
    // continuous elements in linked list.
    System.out.print("Number of continuously " +
                     "increasing element in list : ");
    System.out.println(max_len);
 
    // Traverse the list again to print
    // longest increasing sublist
    int i = 0;
    System.out.println("Increasing linked list");
    for (Node curr = head; curr != null;
                           curr = curr.next)
    {
        // compare with starting index and index of
        // maximum increasing elements if both are
        // equals then execute it.
        if (i == res_index)
        {
            // loop until max greater then 0.
            while (max_len > 0)
            {
                // Display the list and temp point
                // to the next element.
                System.out.print(curr.data + " ");
                curr = curr.next;
                max_len--;
            }
            break;
        }
        i++;
    }
}
 
// Function to insert an element at the beginning
static void push(Node head_ref, int data)
{
    Node newNode = new Node();
    newNode.data = data;
    newNode.next = head_ref;
    head_ref = newNode;
    head = head_ref;
}
 
// Display linked list.
static void printList(Node node)
{
    while (node != null)
    {
        System.out.print(node.data + " ");
        node = node.next;
    }
    System.out.println();
}
 
// Driver Code
public static void main(String[] args)
{
    // Create a node and initialize with null
    head = null;
 
    // push() insert node in linked list.
    // 15 -> 18 -> 5 -> 8 -> 11 -> 12
    push(head, 12);
    push(head, 11);
    push(head, 8);
    push(head, 5);
    push(head, 18);
    push(head, 15);
    System.out.println("Linked list:");
    printList(head);
 
    // Function call countIncreasingElements(head)
    countIncreasingElements(head);
}
}
 
// This code is contributed by Princi Singh

Python3

# Program to count maximum number of continuous
# increasing element in linked list and display
# the elements of linked list.
import math
 
class Node:
    def __init__(self, data):
        self.data = data
        self.next = None
 
# Function that count maximum number of continuous
# increasing elements in linked list and display
# the list.
def countIncreasingElements(head):
     
    # Traverse the list and keep track of
    # max increasing and current increasing lengths
    curr_len = 1
    max_len = 1
    total_count = 1
    res_index = 0
    curr = head
    while(curr.next != None):
         
        # Compare head.data with head.next.data
        if (curr.data < curr.next.data):
            curr_len = curr_len + 1
        else:
             
            # compare maximum length with len.
            if (max_len < curr_len):
                max_len = curr_len
                res_index = total_count - curr_len
             
            curr_len = 1
         
        total_count = total_count + 1
        curr = curr.next
     
    if (max_len < curr_len):
        max_len = curr_len
        res_index = total_count - max_len
     
    # Print the maximum number of
    # continuous elements in linked list.
    print("Number of continuously increasing",
               "element in list : ", end = "")
    print(max_len)
 
    # Traverse the list again to print
    # longest increasing sublist
    i = 0
    print("Increasing linked list")
    curr = head
    while(curr != None):
         
        # compare with starting index and index of
        # maximum increasing elements if both are
        # equals then execute it.
        if (i == res_index):
             
            # loop until max greater then 0.
            while (max_len > 0):
                 
                # Display the list and temp point
                # to the next element.
                print(curr.data, end = " ")
                curr = curr.next
                max_len = max_len - 1
             
            break
         
        i = i + 1
        curr = curr.next
 
# Function to insert an element
# at the beginning
def push(head, data):
    newNode = Node(data)
    newNode.data = data
    newNode.next = head
    head = newNode
    return head
 
# Display linked list.
def printList(node) :
    while (node != None):
        print(node.data, end = " ")
        node = node.next
     
    print()
 
# Driver Code
if __name__=='__main__':
 
    # Create a node and initialize with None
    head = None
 
    # push() insert node in linked list.
    # 15 . 18 . 5 . 8 . 11 . 12
    head = push(head, 12)
    head = push(head, 11)
    head = push(head, 8)
    head = push(head, 5)
    head = push(head, 18)
    head = push(head, 15)
    print("Linked list:")
    printList(head)
 
    # Function call countIncreasingElements(head)
    countIncreasingElements(head)
 
# This code is contributed by Srathore

C#

// C# Program to count maximum number
// of continuous increasing element in
// linked list and display the elements
// of linked list.
using System;
     
class GFG
{
class Node
{
    public int data;
    public Node next;
}
static Node head;
 
// Function that count maximum number
// of continuous increasing elements
// in linked list and display the list.
static void countIncreasingElements(Node head)
{
    // Traverse the list and keep track
    // of max increasing and
    // current increasing lengths
    int curr_len = 1, max_len = 1;
    int total_count = 1, res_index = 0;
    for (Node curr = head; curr.next != null;
                           curr = curr.next)
    {
        // Compare head.data with head.next.data
        if (curr.data < curr.next.data)
            curr_len++;
        else
        {
            // compare maximum length with len.
            if (max_len < curr_len)
            {
                max_len = curr_len;
                res_index = total_count - curr_len;
            }
 
            curr_len = 1;
        }
        total_count++;
    }
 
    if (max_len < curr_len)
    {
        max_len = curr_len;
        res_index = total_count - max_len;
    }
 
    // Print the maximum number of
    // continuous elements in linked list.
    Console.Write("Number of continuously " +
                  "increasing element in list : ");
    Console.WriteLine(max_len);
 
    // Traverse the list again to print
    // longest increasing sublist
    int i = 0;
    Console.WriteLine("Increasing linked list");
    for (Node curr = head; curr != null;
                           curr = curr.next)
    {
        // compare with starting index and index of
        // maximum increasing elements if both are
        // equals then execute it.
        if (i == res_index)
        {
            // loop until max greater then 0.
            while (max_len > 0)
            {
                // Display the list and temp point
                // to the next element.
                Console.Write(curr.data + " ");
                curr = curr.next;
                max_len--;
            }
            break;
        }
        i++;
    }
}
 
// Function to insert an element at the beginning
static void push(Node head_ref, int data)
{
    Node newNode = new Node();
    newNode.data = data;
    newNode.next = head_ref;
    head_ref = newNode;
    head = head_ref;
}
 
// Display linked list.
static void printList(Node node)
{
    while (node != null)
    {
        Console.Write(node.data + " ");
        node = node.next;
    }
    Console.WriteLine();
}
 
// Driver Code
public static void Main(String[] args)
{
    // Create a node and initialize with null
    head = null;
 
    // push() insert node in linked list.
    // 15 -> 18 -> 5 -> 8 -> 11 -> 12
    push(head, 12);
    push(head, 11);
    push(head, 8);
    push(head, 5);
    push(head, 18);
    push(head, 15);
    Console.WriteLine("Linked list:");
    printList(head);
 
    // Function call countIncreasingElements(head)
    countIncreasingElements(head);
}
}
 
// This code is contributed by PrinciRaj1992

Javascript

<script>
 
      // JavaScript Program to count maximum number
      // of continuous increasing element in
      // linked list and display the elements
      // of linked list.
      class Node {
        constructor() {
          this.data = 0;
          this.next = null;
        }
      }
      var head = null;
 
      // Function that count maximum number
      // of continuous increasing elements
      // in linked list and display the list.
      function countIncreasingElements(head) {
        // Traverse the list and keep track
        // of max increasing and
        // current increasing lengths
        var curr_len = 1,
          max_len = 1;
        var total_count = 1,
          res_index = 0;
        for (var curr = head; curr.next != null;
             curr = curr.next) {
          // Compare head.data with head.next.data
          if (curr.data < curr.next.data) curr_len++;
          else {
            // compare maximum length with len.
            if (max_len < curr_len) {
              max_len = curr_len;
              res_index = total_count - curr_len;
            }
 
            curr_len = 1;
          }
          total_count++;
        }
 
        if (max_len < curr_len) {
          max_len = curr_len;
          res_index = total_count - max_len;
        }
 
        // Print the maximum number of
        // continuous elements in linked list.
        document.write(
          "Number of continuously " + "increasing element in list : "
        );
        document.write(max_len + "<br>");
 
        // Traverse the list again to print
        // longest increasing sublist
        var i = 0;
        document.write("Increasing linked list <br>");
        for (var curr = head; curr != null; curr = curr.next) {
          // compare with starting index and index of
          // maximum increasing elements if both are
          // equals then execute it.
          if (i == res_index) {
            // loop until max greater then 0.
            while (max_len > 0) {
              // Display the list and temp point
              // to the next element.
              document.write(curr.data + " ");
              curr = curr.next;
              max_len--;
            }
            break;
          }
          i++;
        }
      }
 
      // Function to insert an element at the beginning
      function push(head_ref, data) {
        var newNode = new Node();
        newNode.data = data;
        newNode.next = head_ref;
        head_ref = newNode;
        head = head_ref;
      }
 
      // Display linked list.
      function printList(node) {
        while (node != null) {
          document.write(node.data + " ");
          node = node.next;
        }
        document.write("<br>");
      }
 
      // Driver Code
      // Create a node and initialize with null
      head = null;
 
      // push() insert node in linked list.
      // 15 -> 18 -> 5 -> 8 -> 11 -> 12
      push(head, 12);
      push(head, 11);
      push(head, 8);
      push(head, 5);
      push(head, 18);
      push(head, 15);
      document.write("Linked list: <br>");
      printList(head);
 
      // Function call countIncreasingElements(head)
      countIncreasingElements(head);
       
</script>

Producción:  

Linked list:
15 18 5 8 11 12 
Number of continuously increasing element in list :4
Increasing linked list
5 8 11 12

Este artículo es una contribución de Dharmendra kumar . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 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 *