using System.Collections.Generic;
public static void Main(string[] args)
Console.WriteLine (dfsTraversal(g));
public static void dfs_helper(Graph g, int source, bool [] visited, ref string result)
Stack<int> stack = new Stack<int> { };
current_node = stack.Pop();
result += current_node.ToString() ;
temp = (g.getArray())[current_node].GetHead();
visited[temp.data] = true;
public static string dfsTraversal(Graph g)
bool [] visited = new bool[g.getVertices()];
for (int i = 0; i < g.getVertices(); i++)
for (int i = 0; i < g.getVertices(); i++)
dfs_helper(g, i, visited, ref result);
array = new LinkedList[v];
for(int i = 0; i < v; i++)
array[i] = new LinkedList();
public void addEdge(int source, int destination)
if (source < vertices && destination < vertices)
array[source].InsertAtHead(destination);
Console.WriteLine("Adjacency List of Directed Graph");
for (int i = 0; i < vertices; i++)
Console.Write( "|" + i + "| => ");
temp = (array[i]).GetHead();
Console.Write("[" + temp.data + "] -> ");
Console.WriteLine("NULL");
public LinkedList [] getArray()
internal Node nextElement;
Console.Write("List is Empty!");
Console.Write("List : ");
Console.Write(temp.data + "->");
Console.WriteLine("null ");
public void InsertAtHead(int value)
Node newNode = new Node();
newNode.nextElement = head;
string elementsList = "";
elementsList += start.data.ToString();
start = start.nextElement;
while (start != null && start.data != check.data)
elementsList += start.data.ToString();
start = start.nextElement;
return elementsList + "null";
elementsList += check.data.ToString();
public void InsertAtTail(int value)
Node newNode = new Node();
while (last.nextElement != null)
Console.Write(value + " Inserted! ");
newNode.nextElement = null;
last.nextElement = newNode;
public bool Search(int value)
public bool Delete(int value)
Console.WriteLine("List is Empty");
Node previousNode = null;
if (currentNode.data == value)
deleted = DeleteAtHead();
Console.WriteLine(value + " deleted!");
previousNode = currentNode;
currentNode = currentNode.nextElement;
while (currentNode != null)
if (value == currentNode.data)
previousNode.nextElement = currentNode.nextElement;
currentNode = previousNode.nextElement;
previousNode = currentNode;
currentNode = currentNode.nextElement;
Console.WriteLine(value + " does not exist!");
Console.WriteLine(value + " deleted!");
Console.WriteLine("List is Empty");
current = current.nextElement;
next = current.nextElement;
current.nextElement = previous;
Node slow = head, fast = head;
while ((slow != null) && (fast != null) && (fast.nextElement != null))
fast = fast.nextElement.nextElement;
while (temp.nextElement != null)
if (currentNode.nextElement == null)
Node midNode = currentNode;
currentNode = currentNode.nextElement.nextElement;
while (currentNode != null)
midNode = midNode.nextElement;
currentNode = currentNode.nextElement;
currentNode = currentNode.nextElement;
public string RemoveDuplicates()
Node start, startNext = null;
while ((start != null) && (start.nextElement != null))
while (startNext.nextElement != null)
if (start.data == startNext.nextElement.data)
startNext.nextElement = startNext.nextElement.nextElement;
startNext = startNext.nextElement;
start = start.nextElement;
public string Union(LinkedList list1, LinkedList list2)
else if (list2.IsEmpty())
while (start.nextElement != null)
start = start.nextElement;
start.nextElement = list2.head;
return list1.RemoveDuplicates();
public int FindNth(int n)
while (currentNode != null)
currentNode = currentNode.nextElement;
int position = length - n;
if (position < 0 || position > length)
while (count != position)
currentNode = currentNode.nextElement;