using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MyListNew
{
class Program
{
static void Main(string[] args)
{
DataList<int> t = new DataList<int>();
t.Add(1);
t.Add(2);
t.Add(3);
t.Add(4);
t.Remove(3);
t.Search(4);
}
}
public class DataNode<T>
{
public T Data;//数据
public DataNode<T> Previous;//上一个节点
public DataNode<T> Next;//下一个节点
/// <summary>
/// 构造函数
/// </summary>
public DataNode()
{
Data = default(T);
Previous = null;
Next = null;
}
public DataNode(T item)
{
Data = item;
Previous = null;
Next = null;
}
}
public class DataList<T>
{
public DataNode<T> Head { set; get; }//头
public DataNode<T> Tail { set; get; }//尾
private int count = 0;//链表的长度
public int Count
{
get
{
return count;
}
set
{
count = value;
}
}
/// <summary>
/// 添加
/// </summary>
/// <param name="item"></param>
public void Add(T item)
{
DataNode<T> t = new DataNode<T>(item);
if (t == null)
{
return;
}
if (Head == null)
{
Head = t;
Tail = t;
}
else
{
Tail.Next = t;
t.Previous = Tail;
Tail = t;
}
count++;
}
/// <summary>
/// 删除
/// </summary>
public void Remove(T item)
{
DataNode<T> t = new DataNode<T>(item);
if (t == null)
{
return;
}
//先查找
DataNode<T> result = Search(t.Data);
if (result == null)
{
return;
}
else
{
if (result == null)
{
Head = t.Next;
}
else
{
result.Previous.Next = result.Next;
if (result.Previous.Next == null)
{
Tail = result.Previous;
}
}
if (result.Next == null)
{
Tail = result.Previous;
}
else
{
result.Next.Previous = result.Previous;
if (result.Next.Previous == null)
{
Head = result.Next;
}
}
count--;
}
}
/// <summary>
/// 查找
/// </summary>
/// <param name="item"></param>
/// <returns></returns>
public DataNode<T> Search(T item)
{
DataNode<T> t = new DataNode<T>(item);
DataNode<T> head = new DataNode<T>();
head = Head;
if (t == null)
{
return default(DataNode<T>);
}
while (head != null)
{
if (head.Data.Equals(t.Data))
{
t.Previous = head.Previous;
t.Next = head.Next;
return t;
}
head = head.Next;
}
return default(DataNode<T>);
}
}
}