今天加迭代器的是否发现删除有错误,修改了再放上来,改了哪里就让大家自己比较吧 结点 /**/ /// <summary> /// 结点 /// </summary> /// <typeparam name="T">泛型对象</typeparam> internal class LNode < T > ... { /**//// <summary> /// 构造函数 /// </summary> public LNode() ...{ } /**//// <summary> /// 构造函数 设置泛型值 /// </summary> /// <param name="NodeValue">结点</param> public LNode(T NodeValue) ...{ _Data = NodeValue; } private T _Data=default (T) ; /**//// <summary> /// 值 /// </summary> public T Data ...{ get ...{ return _Data; } set ...{ _Data = value; } } private LNode<T> _Next=null ; /**//// <summary> /// 下一个节点 /// </summary> public LNode<T> Next ...{ get ...{ return _Next; } set ...{ _Next = value; } } } 链表 /**/ /// <summary> /// 单链表 /// </summary> public class LinkList < T > :IEnumerable < T > ... { /**//// <summary> /// 构造函数 /// </summary> public LinkList() ...{ //表头等于表尾 _EndNode = _HeadNode; } /**//// <summary> /// 迭代器 /// </summary> /// <returns>迭代结果</returns> public IEnumerator<T> GetEnumerator() ...{ LNode<T> Node = _HeadNode; while (Node.Next != null) ...{ Node = Node.Next; yield return Node.Data; } } IEnumerator IEnumerable.GetEnumerator() ...{ return GetEnumerator(); } /**//// <summary> /// 索引 /// </summary> /// <param name="index">索引ID</param> /// <returns>结点值</returns> public T this[int index] ...{ get ...{ return GetData(index); } set ...{ Modify(index, value); } } private int _Length = 0; /**//// <summary> /// 单链表长度 /// </summary> public int Length ...{ get ...{ return _Length; } } private LNode<T> _HeadNode=new LNode<T> (); //头结点 private LNode<T> _EndNode = new LNode<T>(); //尾结点 /**//// <summary> /// 寻找结点 /// </summary> /// <param name="index">索引ID</param> /// <returns>结点</returns> /// <exception cref="System.IndexOutOfRangeException">索引号超出单链表长度</exception> private LNode<T> Find(int index) ...{ if (index >= _Length) throw new IndexOutOfRangeException("索引号超出单链表长度"); LNode<T> FindNode=new LNode<T> (); FindNode = _HeadNode.Next; for (int iCount = 0; iCount < index; iCount++) ...{ FindNode = FindNode.Next; } return FindNode; } /**//// <summary> /// 得到结点值 /// </summary> /// <param name="index">索引ID</param> /// <returns>结点值</returns> public T GetData(int index) ...{ //索引不合法 if (index < 0 || index >= _Length) return default(T); //返回找到的值 return Find(index).Data; } /**//// <summary> /// 表尾添加结点 /// </summary> /// <param name="NodeValue">结点值</param> public void Append(T NodeValue) ...{ LNode<T> NewNode = new LNode<T>(NodeValue); _EndNode.Next = NewNode; _EndNode = NewNode; if(_Length==0) _HeadNode .Next =NewNode ; ++_Length; } /**//// <summary> /// 插入表头 /// </summary> /// <param name="NodeValue">结点值</param> public void InsertFirst(T NodeValue) ...{ LNode<T> ListNode = new LNode<T>(NodeValue); ListNode.Next = _HeadNode.Next; _HeadNode.Next = ListNode; //如果为空表 尾结点设置 if (_Length == 0) _EndNode = ListNode; ++_Length; } /**//// <summary> /// 插入结点 索引之前 /// </summary> /// <param name="index">索引ID</param> /// <param name="NodeValue">结点值</param> /// <returns>true表示插入成功,false表示插入失败</returns> public bool InsertBefore(int index, T NodeValue) ...{ //如果小于长度 返回假 if (index < 0 || index >= _Length) return false; LNode<T> InsertNode = new LNode<T>(NodeValue); //如果为头结点 if (index == 0) ...{ InsertNode.Next = _HeadNode.Next; _HeadNode.Next = InsertNode; ++_Length; return true; } //如果为中间结点 LNode<T> FindNode = Find(index - 1); InsertNode.Next = FindNode.Next; FindNode.Next = InsertNode; ++_Length; return true; } /**//// <summary> /// 插入结点 索引之后 /// </summary> /// <param name="index">索引ID</param> /// <param name="NodeValue">结点值</param> /// <returns>true表示插入成功,false表示插入失败</returns> public bool InsertAfter(int index, T NodeValue) ...{ //如果小于长度 返回假 if (index < 0 || index >= _Length) return false; //如果为尾结点 if (index == _Length-1) ...{ Append(NodeValue); return true; } //如果为中间结点 LNode<T> FindNode = Find(index); LNode<T> InsertNode = new LNode<T>(NodeValue); InsertNode.Next = FindNode.Next; FindNode.Next = InsertNode; ++_Length; return true; } /**//// <summary> /// 修改结点值 /// </summary> /// <param name="index">索引ID</param> /// <param name="NodeValue">结点值</param> /// <returns>true表示修改成功,false表示修改失败</returns> public bool Modify(int index, T NodeValue) ...{ //索引不合法 if (index < 0 || index >= _Length) return false; //如果为尾结点 if (index == _Length - 1) ...{ _EndNode.Data = NodeValue; return true; } //如果为中间结点 Find(index).Data =NodeValue ; return true; } /**//// <summary> /// 删除结点值 /// </summary> /// <param name="index">索引ID</param> /// <returns>删除的结点值</returns> public T Delete(int index) ...{ //索引不合法 if (index < 0 || index >= _Length) return default(T); LNode<T> DelNode = _HeadNode.Next; //如果为头结点 if (index == 0) ...{ _HeadNode.Next = DelNode.Next; --_Length; return DelNode.Data; } LNode<T> FindNode = Find(index - 1); DelNode = FindNode.Next ; FindNode.Next = DelNode.Next; //也可以是FindNode.Next = FindNode.Next.Next //如果为表尾 //if(index ==Length -1) --_Length; return DelNode.Data; } }