class ListNode<T>
{
private T data;
private ListNode<T> next;
public ListNode()
{
data = default(T);
next = null;
}
public ListNode(T _value)
{
next = null;
data = _value;
}
public ListNode(ListNode<T> _head)
{
next = _head;
data = default(T);
}
public ListNode(ListNode<T> _head, T _value)
{
next = _head;
data = _value;
}
public T GetValue
{
get { return data; }
set { data = value; }
}
public ListNode<T> GetNext
{
get { return next; }
set { next = value; }
}
}
class ListScript : ListNode
{
private ListNode head;
public ListNode<T> GetHead
{
get { return head; }
set { head = value; }
}
public ListScript()
{
head = null;
}
public ListScript(ListNode<T> _head)
{
head = _head;
}
public int GetLenght()
{
int count = 0;
ListNode<T> p = head;
while (p != null)
{
p = p.GetNext;
count++;
}
return count;
}
public void Clear()
{
head = null;
}
public bool IsEmpty()
{
if (head == null)
{
return true;
}
else
return false;
}
public void Append(T item)
{
ListNode<T> p = head;
ListNode<T> node = new ListNode<T>(item);
while (p != null)
{
p = p.GetNext;
}
p.GetNext = node;
}
/// <summary>
/// 在单链表的第i个结点的位置前插入一个值为item的结点
/// </summary>
/// <param name="i"></param>
/// <param name="item"></param>
public void Insert(int i,T item)
{
if (i < 1 || IsEmpty())
return;
ListNode<T> q = new ListNode<T>(item);
if (i == 1)
{
q.GetNext = head;
head = q;
return;
}
if (i > 1)
{
ListNode<T> p = head;
ListNode<T> r = new ListNode<T>();
int j = 1;
while (p != null)
{
r = p;
p = p.GetNext;
++j;
}
if (i == j)
{
q.GetNext = p;
r.GetNext = q;
}
}
}
/// <summary>
/// 在单链表的第i个结点的位置后插入一个值为item的结点
/// </summary>
/// <param name="i"></param>
/// <param name="item"></param>
public void InsertPost(int i, T item)
{
if (i < 1 || IsEmpty())
return;
ListNode<T> q = new ListNode<T>(item);
if (i == 1)
{
q.GetNext = head.GetNext;
head.GetNext = q;
return;
}
int j = 1;
ListNode<T> p = head;
while (p != null)
{
p = p.GetNext;
++j;
}
if (i == j)
{
q.GetNext = p.GetNext;
p.GetNext = q;
}
}
/// <summary>
/// 删除一个节点
/// </summary>
/// <param name="i"></param>
/// <returns></returns>
public T Delet(int i)
{
if (i < 1 || IsEmpty())
return default(T);
ListNode<T> q = new ListNode<T>();
if (i == 1)
{
q = head;
head = head.GetNext;
return q.GetValue;
}
int j = 1;
ListNode<T> p = head;
while (p != null&&i<j)
{
q = p;
p = p.GetNext;
++j;
}
if (i == j)
{
q.GetNext = p.GetNext;
return q.GetValue;
}
else
return default(T);
}
/// <summary>
/// /获得单链表的第i个数据元素
/// </summary>
/// <param name="i"></param>
/// <returns></returns>
public T GetItem(int i)
{
if (i < 1 || IsEmpty())
return default(T);
ListNode<T> p = head;
int j = 1;
while (p != null&&i<j)
{
++j;
p = p.GetNext;
}
if (j == i)
{
return p.GetValue;
}
else
return default(T);
}
/// <summary>
/// 在单链表中查找值为value的结点
/// </summary>
/// <param name="item"></param>
/// <returns></returns>
public int GetLocalValue(T item)
{
if (IsEmpty())
return -1;
ListNode<T> p = head;
int j = 1;
while (p != null && p.GetValue.Equals(item))
{
p = p.GetNext;
++j;
}
return j;
}
}