namespace ConsoleApplication16
{
class ListNode //节点定义
{
public ListNode PreviousNode;//指向前一个节点
public ListNode NextNode; //指向后一个节点
public int Value; //节点中数据值
public ListNode(int NewValue)//构造方法
{
Value = NewValue;
}
}
class ListClass //对链表的操作类
{
private ListNode Head; //定义一个首节点
private ListNode Last; //定义一个尾节点
private ListNode Current; //定义一个当前节点
private int listCount; //节点数
public ListClass() //定义链表构造方法
{
Head = Last = null;
listCount = 0;
}
public bool IsNull() //判断链表是否为空的方法
{
if (listCount == 0)
return true;
return false;
}
public bool IsBof() //定义判断当前节点是否在首节点的方法
{
if (Current == Head)
return true;
return false;
}
public bool IsEof() //定义判断当前节点是否在尾节点的方法
{
if (Current == Last)
return true;
return false;
}
public void MoveFirst() //将当前节点移动到首节点的方法
{
Current = Head;
}
public void MoveLast() //将当前节点指针指向尾节点的方法
{
Current = Last;
}
public void MoveNextNode() //将当前节点指向前一个节点
{
if (!IsEof()) Current = Current.NextNode;
}
public void MovePreviousNode()//将当前节点指向后一个节点
{
if (!IsBof()) Current = Current.PreviousNode;
}
public int GetCurrentValue() //获取当前节点值
{
return Current.Value;
}
public int ListCount //获取节点个数
{
get{
return listCount;
}
}
public void AppendNode(int DataValue)//向链表尾部插入数据
{
ListNode newNode = new ListNode(DataValue);
if (IsNull())
{
Head = newNode;
Last = newNode;
}
else
{
Last.NextNode = newNode;
newNode.PreviousNode = Last;
Last = newNode;
}
Current = newNode;
listCount+=1;
Console.WriteLine("数据{0}添加成功", DataValue);
}
public void Delete() //删除当前节点
{
if (!IsNull())
{
if (IsBof())
{
Head = Current.NextNode;
Current = Head;
listCount -= 1;
return;
}
if (IsEof())
{
Last = Current.PreviousNode;
Current = Last;
listCount -= 1;
return;
}
Current = Current.NextNode;
Current = Current.PreviousNode;
listCount -= 1;
return;
}
}
public void Clear() //清空链表
{
MoveFirst();
while (!IsNull())
{
Delete();
}
}
}
class Program
{
static void Main(string[] args)
{
ListClass ls = new ListClass();
ls.AppendNode(1);
ls.AppendNode(5);
ls.AppendNode(3);
ls.AppendNode(4);
Console.WriteLine("数据添加成功");
ls.Delete();
ls.MoveFirst();
for (int i = 0; i < ls.ListCount; i++)
{
Console.WriteLine("链表的当前值为:" + ls.GetCurrentValue().ToString());
ls.MoveNextNode();
}
Console.Read();
}
}
}
09-17
09-17