/// <summary> /// 添加一个节点到表头 /// </summary> /// <param name="pNode"></param> public DoubleLinkedListNode <T> AddToHeader(DoubleLinkedListNode <T> pNode) { if (pNode == null) { return(null); } pNode.prev = null; //该节点的前一个节点设置为空 if (Head == null) //双向链表,表头不存在 { Head = Tail = pNode; //该节点是双向链表的第一个节点, 双向链表的头,尾都是这个节点 } else { //双向链表头存在 pNode.next = Head; //该节点下一个节点是双向链表当前的头节点,它要插到表头 pNode.prev = null; //该节点前一个节点没有,他要当表头,没有前一个 Head = pNode; //双向链表的头节点设置成改节点 } m_Count++; //双向链表的节点总数++ return(Head); }
/// <summary> /// 添加一个节点到表尾 /// </summary> /// <param name="pNode"></param> public DoubleLinkedListNode <T> AddToTail(DoubleLinkedListNode <T> pNode) { if (pNode == null) { return(null); } pNode.next = null; //该节点的后一个节点设置为空 if (Tail == null) //双向链表,表尾不存在 { Head = Tail = pNode; //该节点是双向链表的第一个节点, 双向链表的头,尾都是这个节点 } else { //双向链表尾存在 pNode.prev = Tail; //该节点前一个节点是双向链表当前的尾节点,它要插到表尾 pNode.next = null; //该节点下一个节点没有,他要当表尾,没有下一个 Head = pNode; //双向链表的尾节点设置成改节点 } m_Count++; //双向链表的节点总数++ return(Head); }
/// <summary> /// 把某个节点移动到头部 /// </summary> /// <param name="pNode"></param> public void MoveToHead(DoubleLinkedListNode <T> pNode) { if (pNode == null || pNode == Head) { return; } if (pNode.prev == null && pNode.next == null) { return; } if (pNode == Tail) //该节点是尾节点 { Tail = pNode.prev; //设置尾结点是是他的上节点 } //设置前面节点和后面节点链接 if (pNode.prev != null) { pNode.prev.next = pNode.next; } //设置后面节点和前面节点链接 if (pNode.next != null) { pNode.next.prev = pNode.prev; } pNode.prev = null; pNode.next = Head; Head.prev = pNode; Head = pNode; if (Tail == null) { Tail = Head; } }