Linked list is a useful data structure. In fact sometimes it is compulsory. So i will share an example for linked list with you.
Firstly we create a c# project. Then we need three class. These Node.cs, LinkedList.cs and LinkedListADT.cs. (ADT’s mean is Abstract Data Type.)
If we created these classes, we can write their codes.
Node.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace LinkedListExample { public class Node { public int Data; public Node Next; } }
LinkedListADT.cs (Abstract class)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace LinkedListExample { public abstract class LinkedListADT { public Node Head; public int Size = 0; public abstract void InsertFirst(int value); public abstract void InsertLast(int value); public abstract void InsertPos(int position, int value); public abstract void DeleteFirst(); public abstract void DeleteLast(); public abstract void DeletePos(int position); public abstract Node GetElement(int position); public abstract string DisplayElements(); public abstract void Reverse(ref Node head); } }
LinkedList.cs (extends LinkedListADT)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace LinkedListADT { public class LinkedList : LinkedListADT { public override void InsertFirst(int value) { Node tempHead = new Node { Data = value }; if (Head == null) Head = tempHead; else { tempHead.Next = Head; Head = tempHead; } Size++; } public override void InsertLast(int value) { Node iter = Head; if (Head == null) { InsertFirst(value); } else{ while (iter.Next != null) { iter = iter.Next; } Node eklenecekNode = new Node { Data = value }; eklenecekNode.Next = null; iter.Next = eklenecekNode; Size++; } } public override void InsertPos(int position, int value) { Node iter = Head; for (int i = 0; i < position; i++) { iter = iter.Next; } Node eklenecekNode = new Node { Data = value }; eklenecekNode = iter.Next; iter.Next = eklenecekNode; Size++; } public override void DeleteFirst() { if (Head != null) { Node tempHead = Head.Next; if (tempHead == null) Head = null; else Head = tempHead; Size--; } } public override void DeleteLast() { Node iter = Head; while(iter.Next.Next != null){ iter = iter.Next; } iter.Next = null; Size--; } public override void DeletePos(int position) { Node iter = Head; for (int i = 1; i < position-1; i++) { iter = iter.Next; } Node tempNode =new Node(); tempNode = iter.Next.Next; iter.Next = tempNode; Size--; } public override Node GetElement(int position) { Node iter = Head; for (int i = 1; i <= position; i++) { iter = iter.Next; } return iter; } public override string DisplayElements() { string tempElement = ""; Node iter = Head; while (iter != null) { tempElement += "-->" + iter.Data; iter = iter.Next; } return tempElement; } public override void Reverse(ref Node head) { Node currNode = head; Node nextNode = null; Node prevNode = null; while (currNode.Next != null) { nextNode = currNode.Next; currNode.Next = prevNode; prevNode = currNode; currNode = nextNode; } currNode.Next = prevNode; head = currNode; } } }