Ejemplo n.º 1
0
 internal void InsertNodeToEmptyList(CSharpLinkedListNode <T> node)
 {
     head      = node;
     head.next = head;
     head.prev = head;
     count++;
 }
Ejemplo n.º 2
0
 internal void InsertNodeBefore(CSharpLinkedListNode <T> node, CSharpLinkedListNode <T> newNode)
 {
     newNode.next   = node;
     newNode.prev   = node.prev;
     node.prev.next = newNode;
     node.prev      = newNode;
     count++;
 }
Ejemplo n.º 3
0
        //在某个节点前面插入一个值
        public void AddBefore(CSharpLinkedListNode <T> node, CSharpLinkedListNode <T> newNode)
        {
            InsertNodeBefore(node, node);

            //设置头节点
            if (node == head)
            {
                head = newNode;
            }
        }
Ejemplo n.º 4
0
            //访问下一个
            public bool MoveNext()
            {
                _position++;
                if (_position == list.count)
                {
                    return(false);
                }

                current = node.item;
                node    = node.next;
                return(true);
            }
Ejemplo n.º 5
0
 //在链表开头插入节点(插入到head节点之前)
 public void AddFirst(CSharpLinkedListNode <T> node)
 {
     //空链表
     if (head == null)
     {
         InsertNodeToEmptyList(node);
     }
     else
     {
         InsertNodeBefore(head, node);
     }
 }
Ejemplo n.º 6
0
 //在链表结尾插入节点
 public void AddLast(CSharpLinkedListNode <T> node)
 {
     //空链表
     if (head == null)
     {
         InsertNodeToEmptyList(node);
     }
     else
     {
         //链表的结尾就是链表head节点的前一个节点
         InsertNodeBefore(head, node);
     }
 }
Ejemplo n.º 7
0
        public void Remove(CSharpLinkedListNode <T> node)
        {
            //链表仅有这个节点
            if (node.next == node)
            {
                head = null;
            }
            else
            {
                node.prev.next = node.next;
                node.next.prev = node.prev;

                //如果删除的是开头
                if (node == head)
                {
                    head = head.next;
                }
            }
            //干掉node发出来的两根指针,使它成为垃圾
            node.Invalidate();
            count--;
        }
Ejemplo n.º 8
0
 //令一个节点成为垃圾
 public void Invalidate()
 {
     this.prev = null;
     this.next = null;
 }
Ejemplo n.º 9
0
 //初始化
 public CSharpLinkedListEnumerator(CSharpLinkedList <T> data)
 {
     list = data;
     node = list.head;
 }
Ejemplo n.º 10
0
 //在某个节点后面插入一个值
 public void AddAfter(CSharpLinkedListNode <T> node, CSharpLinkedListNode <T> newNode)
 {
     InsertNodeBefore(node.next, newNode);
 }