然后,我们可以在客户端测试一下:
public static void Main (string[] args)
{
MyList<int> mList = new MyList<int>();
//添加元素
mList.Add(1);
mList.Add(11);
mList.Add(111);
mList.Add(1111);
while(mList.currentNode != null)
{
Console.WriteLine (mList.currentNode.num);
mList.currentNode = mList.currentNode.next;
}
}
public static void Main (string[] args)
{
MyList<int> mList = new MyList<int>();
//添加元素
mList.Add(1);
mList.Add(11);
mList.Add(111);
mList.Add(1111);
while(mList.currentNode != null)
{
Console.WriteLine (mList.currentNode.num);
mList.currentNode = mList.currentNode.next;
}
}
我们自己定义的一个整形集合就这样ok了。它有两个优点:可以存放任意多个元素!方便元素的插入和删除。
双向链表的定义和简单操作:
双向链表其实是单链表的改进。当我们对单链表进行操作时,有时你要对某个结点的直接前驱进行操作时,又必须从表头开始查找。这是由单链表结点的结构所限制的。因为单链表每个结点只有一个存储直接后继结点地址的链域,那么能不能定义一个既有存储直接后继结点地址的链域,又有存储直接前驱结点地址的链域的这样一个双链域结点结构呢?这就是双向链表。在双向链表中,结点除含有数据域外,还有两个链域,一个存储直接后继结点地址,一般称之为右链域;一个存储直接前驱结点地址,一般称之为左链域。
namespace DounlyLinkedlist
{
//定义双向链表的结点
public class Node
{
public Object Element;
public Node FLink;
public Node BLink;
public Node()
{
Element = null;
FLink = null;
BLink = null;
}
public Node(Object element)
{
Element = element;
FLink = null;
BLink = null;
}
}
//链表操作的类
public class LinkedList
{
public Node Header;
public LinkedList()
{
Header = new Node("Header");
Header.FLink = null;
Header.BLink = null;
}
//查找结点
private Node Find(Object item)
{
Node Current = new Node();
Current = Header;
while (Current.Element != item)
{
Current = Current.FLink;
}
return Current;
}
//插入结点
public void InsertNode(Object item,Object postionItem)
{
Node Current = new Node();
Node NewItem = new Node(item);
Current = Find(postionItem);
if (Current != null)
{
NewItem.FLink = Current.FLink;
NewItem.BLink = Current;
Current.FLink = NewItem;
}
}
//删除结点
public void Remove(Object item)
{
Node P = Find(item);
if (P.FLink != null)
{
P.BLink.FLink = P.FLink;
P.FLink.BLink = P.BLink;
P.BLink = null;
P.FLink = null;
}
}
//查找双向链表最后一个结点元素
private Node FindLast()
{
Node Current = new Node();
Current = Header;
while (!(Current.FLink == null))
{
Current = Current.FLink;
}
return Current;
}
//逆向打印双向链表
public void PrintReverse()
{
Node Current = new Node();
Current = FindLast();
while (!(Current.BLink == null))
{
Console.WriteLine(Current.Element);
Current = Current.BLink;
}
}
//打印双向链表
public void Print()
{
Node Current = new Node();
Current = Header;
while (!(Current.FLink == null))
{
Console.WriteLine(Current.FLink.Element);
Current = Current.FLink;
}
}
}
}










