public void RemoveNode(SVDoubleLinkedListNode <T> pNode) { if (pNode == null) { return; } if (pNode == Head) { Head = pNode.next; } if (pNode == Tail) { Tail = pNode.prev; } if (pNode.prev != null) { pNode.prev.next = pNode.next; } if (pNode.next != null) { pNode.next.prev = pNode.prev; } m_Count--; pNode.Reset(); m_DoubleLinkNodePool.Recycle(pNode); }
public SVDoubleLinkedListNode <T> AddToTail(T t) { SVDoubleLinkedListNode <T> pList = m_DoubleLinkNodePool.Spawn(true); pList.next = null; pList.prev = null; pList.t = t; return(AddToTail(pList)); }
public SVDoubleLinkedListNode <T> AddToHeader(T t) { SVDoubleLinkedListNode <T> node = m_DoubleLinkNodePool.Spawn(true); node.prev = null; node.next = null; node.t = t; return(AddToHeader(node)); }
/// <summary> /// 查找是否存在该节点 /// </summary> /// <param name="t"></param> /// <returns></returns> public bool Find(T t) { SVDoubleLinkedListNode <T> node = null; if (!m_FindMap.TryGetValue(t, out node) || node == null) { return(false); } return(true); }
public void Remove(T t) { SVDoubleLinkedListNode <T> node = null; if (!m_FindMap.TryGetValue(t, out node) || node == null) { return; } m_DLink.RemoveNode(node); m_FindMap.Remove(t); }
/// <summary> /// 刷新某个节点,把节点移动到头部 /// </summary> /// <param name="t"></param> /// <returns></returns> public bool Reflesh(T t) { SVDoubleLinkedListNode <T> node = null; if (!m_FindMap.TryGetValue(t, out node) || node == null) { return(false); } m_DLink.MoveToHead(node); return(true); }
public void MoveToHead(SVDoubleLinkedListNode <T> pNode) { if (pNode == null || pNode == Head) { return; } if (pNode.prev == null && pNode.next == null) { return; } var t = pNode.t; RemoveNode(pNode); AddToHeader(t); }
public SVDoubleLinkedListNode <T> AddToTail(SVDoubleLinkedListNode <T> pNode) { if (pNode == null) { return(null); } pNode.next = null; if (Tail == null) { Head = Tail = pNode; } else { pNode.prev = Tail; Tail.next = pNode; Tail = pNode; } m_Count++; return(Tail); }
public SVDoubleLinkedListNode <T> AddToHeader(SVDoubleLinkedListNode <T> node) { if (node == null) { return(null); } //如果m_count == 0,则表头表尾都是它 //如果m_count > 0, 则表头是它 if (m_Count == 0) { Head = node; Tail = node; } else { node.next = Head; Head.prev = node; Head = node; } m_Count++; return(Head); }
public void Reset() { prev = next = null; t = null; }