Пример #1
0
        /// <summary>
        /// 用遍历的方法获得节点在链表中的位置。
        /// 如果节点不在链表中,返回-1
        /// </summary>
        /// <param name="node"></param>
        /// <returns></returns>
        public int IndexOf(MultiLinkedListNode <T> node)
        {
            MultiLinkedListEnumerator iter = new MultiLinkedListEnumerator(this);

            int result = -1;

            while (iter.MoveNext())
            {
                result++;
                if (iter.curNode == node)
                {
                    return(result);
                }
            }
            return(-1);
        }
Пример #2
0
 /// <summary>
 /// 查找链表中是否含有值为value的节点,如果有,则删除该节点。若没有,在日志上记录。
 /// 查找过程使用Hash表。
 /// </summary>
 /// <param name="value"></param>
 /// <returns></returns>
 public bool Remove(T value)
 {
     try
     {
         MultiLinkedListNode <T> node = ValueNodeTable[value];
         if (node != null)
         {
             return(Remove(node));
         }
     }
     catch (KeyNotFoundException)
     {
         Log.Write("MultiLinkedList: Remove : keyNotFoundException");
     }
     return(false);
 }
Пример #3
0
        /// <summary>
        /// 在链表的末尾加入一个新的节点
        /// </summary>
        /// <param name="node"></param>
        /// <returns></returns>
        public bool AddLast(MultiLinkedListNode <T> node)
        {
            try
            {
                ValueNodeTable.Add(node.value, node);
                length++;

                last.next = node;
                node.pre  = last;
                last      = node;
            }
            catch (ArgumentException)
            {
                Log.Write("MultiLinkedList : AddLast : ArgumentException : 当前键已存在.");
                return(false);
            }
            return(true);
        }
Пример #4
0
 /// <summary>
 /// 移除链表中的节点
 /// </summary>
 /// <param name="node"></param>
 /// <returns></returns>
 public bool Remove(MultiLinkedListNode <T> node)
 {
     if (node != null && node.pre != null)
     {
         node.pre.next = node.next;
         if (node.next != null)
         {
             node.next.pre = node.pre;
         }
         if (last == node)
         {
             last = node.pre;
         }
         ValueNodeTable.Remove(node.value);
         length--;
         return(true);
     }
     else
     {
         return(false);
     }
 }
Пример #5
0
            public bool MoveNext()
            {
                if (--EnumeLength < 0)
                {
                    return(false);
                }

                if (curNode == null)
                {
                    curNode = first;
                    return(true);
                }
                else if (curNode.next != null)
                {
                    curNode = curNode.next;
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
Пример #6
0
 public MultiLinkedListEnumerator(MultiLinkedList <T> list)
 {
     this.first  = list.First;
     EnumeLength = list.length;
 }
Пример #7
0
        /// <summary>
        /// 在链表的末尾加入一个新的节点
        /// </summary>
        /// <param name="value"></param>
        /// <returns></returns>
        public bool AddLast(T value)
        {
            MultiLinkedListNode <T> node = new MultiLinkedListNode <T>(value);

            return(AddLast(node));
        }
Пример #8
0
 /// <summary>
 /// 构建一个空链表
 /// </summary>
 public MultiLinkedList()
 {
     head           = new MultiLinkedListNode <T>();
     last           = head;
     ValueNodeTable = new Dictionary <T, MultiLinkedListNode <T> >();
 }
Пример #9
0
 public void Reset()
 {
     curNode = first;
 }