88 lines
2.2 KiB
C#
88 lines
2.2 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using C_.Datastructures.Nodes;
|
|
|
|
namespace C_.Datastructures
|
|
{
|
|
public class LinkedList<T>
|
|
{
|
|
public Node<T>? Head { get; set; } = default(Node<T>);
|
|
private int Count { get; set; } = 0;
|
|
|
|
|
|
public static LinkedList<T> Create(){
|
|
//Create a new empty list
|
|
return new LinkedList<T>();
|
|
}
|
|
|
|
public static LinkedList<T> Create(T value){
|
|
//Create a new Class with a single item
|
|
return new LinkedList<T>(){
|
|
Head = Node<T>.Create(value, null),
|
|
Count = 1
|
|
};
|
|
}
|
|
|
|
public static LinkedList<T> Create(LinkedList<T> list1, LinkedList<T> list2){
|
|
//Append a previous list to a new List
|
|
return null;
|
|
}
|
|
|
|
|
|
|
|
public void Add(T value){
|
|
Node<T> newItem = Node<T>.Create(value, default(Node<T>));
|
|
Count++;
|
|
|
|
//Set head to new item if list is empty
|
|
if (Head == null)
|
|
{
|
|
Head = newItem;
|
|
return;
|
|
}
|
|
|
|
//Find last item in list
|
|
Node<T>? end = Head;
|
|
if (end != null)
|
|
{
|
|
end = Traverse();
|
|
}
|
|
|
|
//Append item to end
|
|
end!.Next = new Node<T>{
|
|
Value = value,
|
|
Next = default(Node<T>)
|
|
};
|
|
}
|
|
|
|
private Node<T>? Traverse(){
|
|
//Start at Head of list
|
|
Node<T>? node = Head;
|
|
if (node == null)
|
|
{
|
|
//continue to end of list
|
|
while (node!.Next != default(Node<T>))
|
|
{
|
|
node = (Node<T>)node.Next;
|
|
}
|
|
}
|
|
return node;
|
|
}
|
|
|
|
private Node<T> Traverse(Node<T> start){
|
|
//Start at given point in list
|
|
Node<T> node = start;
|
|
if (node == null)
|
|
{
|
|
//Continue to end of list
|
|
while (node!.Next != default(Node<T>))
|
|
{
|
|
node = (Node<T>)node.Next;
|
|
}
|
|
}
|
|
return node;
|
|
}
|
|
}
|
|
} |