// Online C# Editor for free
// Write, Edit and Run your C# code using C# Online Compiler
using System;
public class Node
{
public Node(int num)
{
Data = num;
Next = null;
}
public int Data;
public Node Next;
}
public class LinkedList
{
public Node head;
public void AddNode(int num)
{
Node newNode = new Node(num);
if(head == null)
{
head = newNode;
return;
}
Node current = head;
while(current.Next != null)
{
current = current.Next;
}
current.Next = newNode;
}
public void CreateLoop()
{
if(head == null)
{
return;
}
Node loopNode = null;
Node temp = head;
while(temp.Next != null)
{
if(temp.Data == 30)
{
loopNode = temp;
}
temp = temp.Next;
}
temp.Next = loopNode;
}
// Floyd Algorithm
// using slow and fast pointers
public bool DetectLoopByFloydAlgorithm()
{
Node slow = head;
Node fast = head;
while(fast != null && fast.Next != null)
{
slow = slow.Next;
fast = fast.Next.Next;
if(slow == fast)
return true;
}
return false;
}
// Reverse the Linked List
// Using Recursion
public void ReverseTraversal(Node node)
{
if(node == null)
{
Console.WriteLine("Linked list is empty");
return;
}
ReverseTraversal(node.Next);
Console.WriteLine(node.Data);
}
}
public class HelloWorld
{
public static void Main(string[] args)
{
LinkedList l1 = new LinkedList();
l1.AddNode(10);
l1.AddNode(20);
l1.AddNode(30);
l1.AddNode(40);
l1.CreateLoop();
bool isLoop = l1.DetectLoopByFloydAlgorithm();
string outputText = isLoop ? "Loop detected" : "No Loop detected";
Console.WriteLine(outputText);
l1.ReverseTraversal(l1.head);
}
}