/// <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); }
/// <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); }
/// <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); }
/// <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); } }
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); } }
public MultiLinkedListEnumerator(MultiLinkedList <T> list) { this.first = list.First; EnumeLength = list.length; }
/// <summary> /// 在链表的末尾加入一个新的节点 /// </summary> /// <param name="value"></param> /// <returns></returns> public bool AddLast(T value) { MultiLinkedListNode <T> node = new MultiLinkedListNode <T>(value); return(AddLast(node)); }
/// <summary> /// 构建一个空链表 /// </summary> public MultiLinkedList() { head = new MultiLinkedListNode <T>(); last = head; ValueNodeTable = new Dictionary <T, MultiLinkedListNode <T> >(); }
public void Reset() { curNode = first; }