C#链表

C#中实现链表,写出来练习下。

首先实现链表中的节点:

  class LinkListNode
{
object value;//节点中存放的数据

public object Value
{
get { return this.value; }
set { this.value = value; }
}
public LinkListNode(object value)
{
this.value = value;
}
LinkListNode nodeNext;//下一个节点

internal LinkListNode NodeNext
{
get { return nodeNext; }
set { nodeNext = value; }
}
LinkListNode nodePrev;//上一个

internal LinkListNode NodePrev
{
get { return nodePrev; }
set { nodePrev = value; }
}
}

实现链表

    class LinkList:IEnumerable
{
LinkListNode frist;

internal LinkListNode Frist
{
get { return frist; }
set { frist = value; }
}
LinkListNode last;

internal LinkListNode Last
{
get { return last; }
set { last = value; }
}

public LinkListNode AddNode(object node)
{
LinkListNode newNode = new LinkListNode(node);
//如果链表中没有节点,则把新添加的节点标记为链表的第一个元素
//然后把新增加的节点的指向下一个的属性设为链表中的最后一个元素的标记
//然后让最后一个和第一个的指向同一个位置
if (frist == null)
{
frist = newNode;
newNode.NodePrev = last;
last = frist;
}
//如果是链表中有元素,首先把最后一个元素给中间变量TMP
//然后把最后一个元素的下一个指向新添加的元素
//接着把链表中最后一个得标记指向新添加的元素
//最后把新添加的元素的上一个元素指定为中间变量TMP
else
{
LinkListNode tmp = last;
last.NodeNext = newNode;
last = newNode;
newNode.NodePrev = tmp;
}
return newNode;
}

public IEnumerator GetEnumerator()
{
LinkListNode cou = frist;
while (cou != null)
{
yield return cou.Value;
cou = cou.NodeNext;
}
}
}

Main方法中来实验下

 static void Main(string[] args)
{
LinkList list = new LinkList();
list.AddNode(1);
list.AddNode(2);
list.AddNode(3);
list.AddNode(4);
foreach (var i in list)
{
Console.WriteLine(i.ToString());
}
}




原文地址:https://www.cnblogs.com/yyzq/p/2406527.html