A linked list is a linear data structure, in which the elements are stored in the form of a node. Each node contains two sub-elements. A data part that stores the value of the element and next part that stores the link to the next node as shown in the below image:

The first node also known as HEAD is always used as a reference to traverse the list. The last node points to NULL. Linked list can be visualized as a chain of nodes, where every node points to the next node.

The types of linked list are mentioned below:

• Singly Linked List: can be traversed only in forward direction.
• Doubly Linked List: can be traversed in forward and backward directions.
• Circular Singly Linked List: Last element contains link to the first element as next.
• Circular Doubly Linked List: Last element contains link to the first element as next and the first element contains link of the last element as previous.

## Implementation of Singly Linked List

### Representation:

In C#, singly linked list can be represented as a class and a Node as a separate class. The LinkedList class contains a reference of Node class type.

```//node structure
class Node {
public int data;
public Node next;
};

//constructor to create an empty LinkedList
}
};
```

### Create a Singly Linked List

Let us create a simple singly linked list which contains three data nodes.

```using System;

//node structure
class Node {
public int data;
public Node next;
};

//constructor to create an empty LinkedList
}
};

// test the code
class Implementation {
static void Main(string[] args) {

Node first = new Node();
first.data = 10;
first.next = null;

Node second = new Node();
second.data = 20;
second.next = null;
first.next = second;

Node third = new Node();
third.data = 30;
third.next = null;
second.next = third;
}
}
```

### Traverse a Singly Linked List

A singly linked list can be traversed using a temp node. Keep on moving the temp node to the next one and displaying its content. At the end of the list, the temp node will become NULL.

```using System;

//node structure
class Node {
public int data;
public Node next;
};

//constructor to create an empty LinkedList
}

//display the content of the list
public void PrintList() {
Node temp = new Node();
if(temp != null) {
Console.Write("The list contains: ");
while(temp != null) {
Console.Write(temp.data + " ");
temp = temp.next;
}
Console.WriteLine();
} else {
Console.WriteLine("The list is empty.");
}
}
};

// test the code
class Implementation {
static void Main(string[] args) {

Node first = new Node();
first.data = 10;
first.next = null;

Node second = new Node();
second.data = 20;
second.next = null;
first.next = second;

Node third = new Node();
third.data = 30;
third.next = null;
second.next = third;

//print the content of list
MyList.PrintList();
}
}
```

The above code will give the following output:

```The list contains: 10 20 30
```

5