using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DS
{
class MyArrayList<T>
{
public Node<T> head;
public int count;
public Node<T> GetItemByIndex (int index)
{
if (count == 0)
{
return null;
}
Node<T> item = head;
for (int i = 0; i < count; i++)
{
if (i == index)
{
return item;
} else
{
item = item.next;
}
}
return item;
}
public void Append (T data)
{
Node<T> newItem = new Node<T>(data);
if (count == 0)
{
head = newItem;
} else
{
Node<T> lastItem = GetItemByIndex(count - 1);
lastItem.next = newItem;
}
count++;
}
public void DeleteByIndex (int index)
{
if (count == 0 || index < 0 || index >= count)
{
throw new ArgumentOutOfRangeException("index", "索引超出范围");
}
if (index == 0)
{
head = head.next;
} else
{
Node<T> lastNode = GetItemByIndex(index - 1);
lastNode.next = lastNode.next.next;
}
count--;
}
public void Insert (int index, T value)
{
if (index < 0 || index >= count)
{
throw new ArgumentOutOfRangeException("index", "索引超出范围");
}
Node<T> newItem = new Node<T>(value);
if (count == 0)
{
head = newItem;
} else if (index == 0)
{
Node<T> item = head;
head = newItem;
head.next = item;
} else
{
Node<T> preItem = GetItemByIndex(index - 1);
Node<T> nextItem = preItem.next;
preItem.next = newItem;
newItem.next = nextItem;
}
count++;
}
public override string ToString ()
{
Node<T> item = head;
Console.Write("Datas:");
while (item != null)
{
Console.Write(item.ToString () + "\t");
item = item.next;
}
Console.Write("\n");
Console.WriteLine("count:{0}", count);
return "";
}
}
class Node<T>
{
public T data;
public Node<T> next;
public Node (T data) {
this.data = data;
}
public Node (T data, Node<T> next)
{
this.data = data;
this.next = next;
}
public override string ToString ()
{
return data.ToString();
}
}
}