using System;
using System.Collections.Generic;
using System.Text;
namespace Algorithms
{
public class LinkedList
{
private Node head;
public LinkedList()
{
head = null;
}
public bool CheckCycle()
{
Node step1Node = head;
Node step2Node = head.NextNode;
while (true)
{
if ((step2Node == null)||(step2Node.NextNode == null))
return false;
else if ((step1Node.Equals(step2Node))||(step1Node.Equals(step2Node.NextNode)))
return true;
else
{
step2Node = step2Node.NextNode;
step2Node = step2Node.NextNode;
step1Node = step1Node.NextNode;
}
}
}
public int FindPosition(int data)
{
Node checkNode = head;
int position = 1;
int dataPosition = 0;
while (checkNode != null)
{
if (checkNode.DataValue == data)
{
dataPosition = position;
}
checkNode = checkNode.NextNode;
position = position + 1;
}
return dataPosition;
}
}
public class Node
{
private int dataValue;
private Node nextNode = null;
public Node(int data)
{
dataValue = data;
}
public Node NextNode
{
get
{
return nextNode;
}
set
{
nextNode = value;
}
}
public int DataValue
{
get
{
return dataValue;
}
set
{
dataValue = value;
}
}
}
}
Sunday, February 25, 2007
Check If Cycle exists in a Linked List
Check if the linked list contains a cycle
Nth Element from the last in a Linked List
Another advanced algorithm is to find the Nth Element from the LAST with the optimal performance.
Here is the implementation
Here is the implementation
using System;
using System.Collections.Generic;
using System.Text;
namespace Algorithms
{
public class LinkedList
{
private Node head;
public LinkedList()
{
head = null;
}
public int FindNthElementFromLast(int m)
{
int n = m - 1;
int returnValue = -1;
if (n >= 0)
{
Node nthElement = head;
Node currentElement = head;
for (int i =0;i less than n;i++)
{
if (currentElement.NextNode != null)
{
currentElement = currentElement.NextNode;
}
else
{
returnValue = -1;
return returnValue;
}
}
if (returnValue != -1)
{
while (currentElement.NextNode != null)
{
currentElement = currentElement.NextNode;
nthElement = nthElement.NextNode;
}
returnValue = nthElement.DataValue;
}
}
return returnValue;
}
}
public class Node
{
private int dataValue;
private Node nextNode = null;
public Node(int data)
{
dataValue = data;
}
public Node NextNode
{
get
{
return nextNode;
}
set
{
nextNode = value;
}
}
public int DataValue
{
get
{
return dataValue;
}
set
{
dataValue = value;
}
}
}
}
Linked List SORT Algorithm
If you need a sort algorithm in Linked List. Please check other implementation in my last blog.
using System;
using System.Collections.Generic;
using System.Text;
namespace Algorithms
{
public class LinkedList
{
private Node head;
public LinkedList()
{
head = null;
}
public void Sort()
{
if (head != null)
{
int j = 0;
Node MinElement = head;
Node currentElement = MinElement.NextNode;
while (currentElement != null)
{
if (currentElement.DataValue < MinElement.DataValue)
{
MinElement = currentElement;
Insert(MinElement.DataValue);
DeleteAtPosition(j+1);
}
MinElement = MinElement.NextNode;
}
}
}
}
public class Node
{
private int dataValue;
private Node nextNode = null;
public Node(int data)
{
dataValue = data;
}
public Node NextNode
{
get
{
return nextNode;
}
set
{
nextNode = value;
}
}
public int DataValue
{
get
{
return dataValue;
}
set
{
dataValue = value;
}
}
}
}
Subscribe to:
Posts (Atom)