您的位置:首页 > 编程语言 > C#

c#自定义简单链表通过IEnumerable接口,范型实现内部迭代

2010-06-04 19:30 441 查看
/// <summary>
/// LinkedListNode<T> 自定义简单链表的节点定义
/// </summary>
public class LinkedListNode<T>
{
//当前节点值
private T _value;
public T Value
{
get { return _value; }
}

//构造函数
public LinkedListNode(T value)
{
this._value = value;
}

//下一个节点
private LinkedListNode<T> _next;
public LinkedListNode<T> Next
{
get { return _next; }
internal set { _next = value; }
}

//当前节点
private LinkedListNode<T> _prev;
public LinkedListNode<T> Prev
{
get { return _prev; }
internal set { _prev = value; }
}
}

using System.Collections.Generic;
using System;
using System.Collections;

/// <summary>
/// LinkedList<T> 自定义简单链表
/// 为使自定义简单链表实现内部迭代,使之实现IEnumerable接口
/// </summary>
public class LinkedList<T> : IEnumerable<T>
{
//首节点
private LinkedListNode<T> _first;
public LinkedListNode<T> First
{
get { return _first; }
}

//尾节点
private LinkedListNode<T> _last;
public LinkedListNode<T> Last
{
get { return _last; }
}

//添加新节点
public void AddLast(T node)
{
LinkedListNode<T> newNode = new LinkedListNode<T>(node);

if (_first == null)
{
_first = newNode;
_last = _first;
}
else
{
_last.Next = newNode;
_last = newNode;
}
}

//定义IEnumerable接口中的GetEnumerator方法
public IEnumerator<T> GetEnumerator()
{
LinkedListNode<T> current = _first;

while (current != null)
{
yield return current.Value;
current = current.Next;
}
}

/* 饿。。。这个地方暂时没搞明白@-@ */
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}

/* 调用 ^-^ */
LinkedList<int> list1 = new LinkedList<int>();
list1.AddLast(0);
list1.AddLast(1);

foreach(int i in list1)
{
Response.Write(i.ToString());
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: