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

c#自定义简单链表通过IEnumerable接口实现内部迭代
原文地址: http://blog.csdn.net/lulu_jiang/archive/2010/06/04/5648098.aspx
/**/ /// <summary>
/// LinkedListNode 自定义简单链表的节点定义
/// </summary>

public   class  LinkedListNode
{
    
//当前节点值
    private object _value;
    
public object Value
    
{
        
get return _value; }
    }


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


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


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

}




using  System.Collections;
using  System;

/**/ /// <summary>
/// LinkedList 自定义简单链表
/// 为使自定义简单链表实现内部迭代,使之实现IEnumerable接口
/// </summary>

public   class  LinkedList:IEnumerable
{
    
//首节点
    private LinkedListNode _first;
    
public LinkedListNode First
    
{
        
get return _first; }
    }


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


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

        
if (_first == null)
        
{
            _first 
= newNode;
            _last 
= _first;
        }

        
else
        
{
            _last.Next 
= newNode;
            _last 
= newNode;
        }

    }


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

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

            
//if (Convert.ToInt32(current.Value) == 1)
            
//{
            
//    yield break;     //停止迭代
            
//}
            
//else
            
//{
            
//    yield return current.Value;    //返回集合的一个元素
            
//    current = current.Next;
            
//}
        }

    }

}



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

        
foreach ( int  i  in  list1)
        
{
            Response.Write(i.ToString());
        }

你可能感兴趣的:(c#自定义简单链表通过IEnumerable接口实现内部迭代)