Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        /// <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);
        }
Beispiel #3
0
        /// <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;
            }
        }