namespace ConsoleApp1
{
public interface ILink<T>
{
bool Insert(T item, int pos);
bool IsEmpty();
int GetLength();
void Append(T item);
void Clear();
T Delete(int pos);
T GetElem(int pos);
int Locate(T value);
}
public class LinkItem<T>
{
public LinkItem()
{
NextItem = default;
NextItem = default;
}
public LinkItem(T value)
{
NextItem = default;
Item = value;
}
public LinkItem<T> NextItem { get; set; }
public T Item { get; set; }
}
public class MyLink<T> : ILink<T>
{
LinkItem<T> LinkHead = default;
LinkItem<T> CurItem = default;
int LinkLenght = 0;
public MyLink()
{
CurItem = LinkHead;
}
public MyLink(LinkItem<T> item)
{
CurItem = LinkHead;
}
public void Append(T item)
{
LinkItem<T> newItem = new LinkItem<T> { Item = item, NextItem = default };
if (LinkHead == null)
{
LinkHead = newItem;
LinkHead.Item = item;
}
else
{
CurItem.NextItem = newItem;
}
CurItem = newItem;
LinkLenght++;
}
public void Clear()
{
LinkHead.NextItem = default;
LinkHead.Item = default;
}
public T Delete(int pos)
{
if (CheckPos( pos))
{
T value = default;
if (pos == 0)
{
LinkHead = LinkHead.NextItem;
}
else
{
LinkItem<T> temp = LinkHead;
while (pos > 1)
{
temp = temp.NextItem;
pos--;
}
value = temp.NextItem.Item;
temp.NextItem = temp.NextItem.NextItem;
LinkLenght--;
}
return value;
}
else
return default;
}
public T GetElem(int pos)
{
if (pos < 0 || pos >= LinkLenght ||LinkLenght<1)
return default;
else
{
LinkItem<T>temp = LinkHead;
while (pos-1>=0)
{
temp = temp.NextItem;
pos--;
}
return temp.Item;
}
}
private bool CheckPos(int pos)
{
if (pos < 0 || pos >= LinkLenght || LinkLenght < 1)
return false;
return true;
}
public int GetLength()
{
return LinkLenght;
// throw new NotImplementedException();
}
public bool Insert(T item, int pos)
{
if(CheckPos(pos))
{
LinkItem<T> temp = LinkHead;
while (pos> 1)
{
temp = temp.NextItem;
pos--;
}
LinkItem<T> NextNode = temp.NextItem;
LinkItem<T> newItem = new LinkItem<T> { Item = item, NextItem = NextNode };
temp.NextItem = newItem;
LinkLenght++;
return true ;
}
return false;
}
public bool IsEmpty()
{
throw new NotImplementedException();
}
public int Locate(T value)
{
throw new NotImplementedException();
}
}
}
static void Main(string[] args)
{
MyLink<string> myLink = new MyLink<string>();
myLink.Append("asdasd");
myLink.Append("666");
myLink.Append("777");
myLink.Append("888");
myLink.Append("999");
myLink.Append("000");
myLink.Insert("gdfgdfgdfg", 3);
myLink.Delete(1);
MyLink<int> myLink2 = new MyLink<int>();
myLink2.Append(1);
myLink2.Append(2);
myLink2.Append(3);
myLink2.Append(5);
myLink2.Append(6);
myLink2.Insert(17, 3);
myLink2.Delete(1);
Console.WriteLine("Hello World!");
}