Comprobar si una lista enlazada es una lista enlazada circular

Dada una lista enlazada individualmente, encuentre si la lista enlazada es circular o no. Una lista enlazada se llama circular si no termina en NULL y todos los Nodes están conectados en forma de ciclo. A continuación se muestra un ejemplo de una lista enlazada circular.

C++

// C++ program to check if linked list is circular
#include<bits/stdc++.h>
using namespace std;
 
/* Link list Node */
struct Node
{
    int data;
    struct Node* next;
};
 
/* This function returns true if given linked
   list is circular, else false. */
bool isCircular(struct Node *head)
{
    // An empty linked list is circular
    if (head == NULL)
       return true;
 
    // Next of head
    struct Node *node = head->next;
 
    // This loop would stop in both cases (1) If
    // Circular (2) Not circular
    while (node != NULL && node != head)
       node = node->next;
 
    // If loop stopped because of circular
    // condition
    return (node == head);
}
 
// Utility function to create a new node.
Node *newNode(int data)
{
    struct Node *temp = new Node;
    temp->data = data;
    temp->next = NULL;
    return temp;
}
 
/* Driver program to test above function*/
int main()
{
    /* Start with the empty list */
    struct Node* head = newNode(1);
    head->next = newNode(2);
    head->next->next = newNode(3);
    head->next->next->next = newNode(4);
 
    isCircular(head)? cout << "Yes\n" :
                      cout << "No\n" ;
 
    // Making linked list circular
    head->next->next->next->next = head;
 
    isCircular(head)? cout << "Yes\n" :
                      cout << "No\n" ;
 
    return 0;
}

Java

// Java program to check if
// linked list is circular
import java.util.*;
 
class GFG
{
     
/* Link list Node */
static class Node
{
    int data;
    Node next;
}
 
/*This function returns true if given linked
list is circular, else false. */
static boolean isCircular( Node head)
{
    // An empty linked list is circular
    if (head == null)
    return true;
 
    // Next of head
    Node node = head.next;
 
    // This loop would stop in both cases (1) If
    // Circular (2) Not circular
    while (node != null && node != head)
    node = node.next;
 
    // If loop stopped because of circular
    // condition
    return (node == head);
}
 
// Utility function to create a new node.
static Node newNode(int data)
{
    Node temp = new Node();
    temp.data = data;
    temp.next = null;
    return temp;
}
 
/* Driver code*/
public static void main(String args[])
{
    /* Start with the empty list */
    Node head = newNode(1);
    head.next = newNode(2);
    head.next.next = newNode(3);
    head.next.next.next = newNode(4);
 
    System.out.print(isCircular(head)? "Yes\n" :
                    "No\n" );
 
    // Making linked list circular
    head.next.next.next.next = head;
 
    System.out.print(isCircular(head)? "Yes\n" :
                    "No\n" );
 
}
}
 
// This code contributed by Arnab Kundu

Python3

# A simple Python program to check if a linked list is circular
 
# Node class
class Node:
 
    # Function to initialise the node object
    def __init__(self, data):
        self.data = data # Assign data
        self.next = None # Initialize next as null
 
 
# Linked List class contains a Node object
class LinkedList:
 
    # Function to initialize head
    def __init__(self):
        self.head = None
 
def Circular(head):
    if head==None:
        return True
         
    # Next of head
    node = head.next
    i = 0
     
    # This loop would stop in both cases (1) If
    # Circular (2) Not circular
    while((node is not None) and (node is not head)):
        i = i + 1
        node = node.next
     
    return(node==head)
 
 
# Code execution starts here
if __name__=='__main__':
    llist = LinkedList()
    llist.head = Node(1)
    second = Node(2)
    third = Node(3)
    fourth = Node(4)
     
    llist.head.next = second;
    second.next = third;
    third.next = fourth
     
    if (Circular(llist.head)):
        print('Yes')
    else:
        print('No')
     
    fourth.next = llist.head
     
    if (Circular(llist.head)):
        print('Yes')
    else:
        print('No')
         
# This code is contributed by Sanket Badhe

C#

// C# program to check if
// linked list is circular
using System;
public class GFG
{
     
/* Link list Node */
public class Node
{
    public int data;
    public Node next;
}
 
/*This function returns true if given linked
list is circular, else false. */
static bool isCircular( Node head)
{
    // An empty linked list is circular
    if (head == null)
    return true;
 
    // Next of head
    Node node = head.next;
 
    // This loop would stop in both cases (1) If
    // Circular (2) Not circular
    while (node != null && node != head)
    node = node.next;
 
    // If loop stopped because of circular
    // condition
    return (node == head);
}
 
// Utility function to create a new node.
static Node newNode(int data)
{
    Node temp = new Node();
    temp.data = data;
    temp.next = null;
    return temp;
}
 
/* Driver code*/
public static void Main(String []args)
{
    /* Start with the empty list */
    Node head = newNode(1);
    head.next = newNode(2);
    head.next.next = newNode(3);
    head.next.next.next = newNode(4);
 
    Console.Write(isCircular(head)? "Yes\n" :
                    "No\n" );
 
    // Making linked list circular
    head.next.next.next.next = head;
 
    Console.Write(isCircular(head)? "Yes\n" :
                    "No\n" );
 
}
}
// This code has been contributed by 29AjayKumar

Javascript

<script>
// javascript program to check if
// linked list is circular
 
    /* Link list Node */
class Node {
    constructor(val) {
        this.data = val;
        this.next = null;
    }
}
 
 
    /*
     * This function returns true if given linked list is circular, else false.
     */
    function isCircular( head) {
        // An empty linked list is circular
        if (head == null)
            return true;
 
        // Next of head
         node = head.next;
 
        // This loop would stop in both cases (1) If
        // Circular (2) Not circular
        while (node != null && node != head)
            node = node.next;
 
        // If loop stopped because of circular
        // condition
        return (node == head);
    }
 
    // Utility function to create a new node.
    function newNode(data) {
         temp = new Node();
        temp.data = data;
        temp.next = null;
        return temp;
    }
 
    /* Driver code */
     
        /* Start with the empty list */
         head = newNode(1);
        head.next = newNode(2);
        head.next.next = newNode(3);
        head.next.next.next = newNode(4);
 
        document.write(isCircular(head) ? "Yes<br/>" : "No<br/>");
 
        // Making linked list circular
        head.next.next.next.next = head;
 
        document.write(isCircular(head) ? "Yes<br/>" : "No<br/>");
 
// This code contributed by gauravrajput1
</script>

C

// C program to check if the linked list is circular
#include <stdio.h>
#include <stdlib.h>
struct Node {
    int data;
    struct Node* next;
};
int isCircular(struct Node* head)
{
    // If linked list is empty it is circular
    if (head == NULL)
        return 1;
    struct Node* ptr;
    ptr = head->next;
    // Traversing linked list till last node
    while (ptr != NULL && ptr != head)
        ptr = ptr->next;
    // Condition for circular linked list
    return (ptr == head);
}
// Function to create new Node
struct Node* newnode(int data)
{
    struct Node* temp;
    temp = (struct Node*)malloc(sizeof(struct Node));
    temp->data = data;
    temp->next = NULL;
    return temp;
}
int main()
{
 
    // code
    // Starting with empty list
    struct Node* head = newnode(1);
    head->next = newnode(2);
    head->next->next = newnode(3);
    head->next->next->next = newnode(4);
    // Checking for circular list
    if (isCircular(head))
        printf("Yes\n");
    else
        printf("No\n");
    // If not circular making it circular
    head->next->next->next->next = head;
    if (isCircular(head))
        printf("Yes\n");
    else
        printf("No\n");
    return 0;
}

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 *