コード例 #1
0
        public void InsertHead(DoubleNode <T> head)
        {
            if (head == null)
            {
                ThrowLinkedListException("头节点不能为空");
            }

            _head      = head;
            _head.Prev = null;
        }
コード例 #2
0
 public DoubleLinkedList(DoubleNode <T> head)
 {
     if (head == null)
     {
         ThrowLinkedListException("头节点不能为空");
     }
     _head      = head;
     _head.Prev = null;
     _head.Next = null;
 }
コード例 #3
0
        public bool InsertValidation(DoubleNode <T> node, DoubleNode <T> newNode)
        {
            if (node == null)
            {
                ThrowLinkedListException("前置节点不能为空");
                return(false);
            }

            if (newNode == null)
            {
                ThrowLinkedListException("插入的节点不能为空");
                return(false);
            }

            return(true);
        }
コード例 #4
0
        public void InsertBefore(DoubleNode <T> node, DoubleNode <T> newNode)
        {
            if (!InsertValidation(node, newNode))
            {
                return;
            }

            var tempNode = _head;

            while (tempNode != null && tempNode.Next != node)
            {
                tempNode = tempNode.Next;
            }

            newNode.Next  = tempNode;
            newNode.Prev  = tempNode.Prev;
            tempNode.Prev = newNode;
        }
コード例 #5
0
        public void InsertAfterIndex(int index, DoubleNode <T> newNode)
        {
            if (index < 0)
            {
                ThrowLinkedListException("index不能小于0");
                return;
            }

            var tempNode = FindNodeByIndex(index);

            if (tempNode != null)
            {
                ThrowLinkedListException("当前index不能不存在数据元素");
                return;
            }

            newNode.Next  = tempNode.Next;
            newNode.Prev  = tempNode;
            tempNode.Next = newNode;
        }
コード例 #6
0
        public void InsertAfter(DoubleNode <T> node, DoubleNode <T> newNode)
        {
            if (!InsertValidation(node, newNode))
            {
                return;
            }

            var tempNode = _head;

            while (tempNode != null && tempNode.Next != node)
            {
                tempNode = tempNode.Next;
            }
            if (tempNode == null)
            {
                ThrowLinkedListException("找不到对应的前置节点");
                return;
            }
            newNode.Next  = tempNode.Next;
            newNode.Prev  = tempNode;
            tempNode.Next = newNode;
        }
コード例 #7
0
 public DoubleNode(T data, DoubleNode <T> prev, DoubleNode <T> next)
 {
     _data = data;
     _prev = prev;
     _next = next;
 }
コード例 #8
0
 public DoubleLinkedList()
 {
     _head = null;
 }