Esempio n. 1
0
        public void Prepend(T value)
        {
            if (head == null)
            {
                head = new LinkListNode <T>
                {
                    Value = value
                };
                return;
            }
            var temp = new LinkListNode <T>
            {
                Value = value,
                Next  = head
            };

            head = temp;
        }
Esempio n. 2
0
        public void Add(T value)
        {
            var newEl = new LinkListNode <T>
            {
                Value = value
            };

            var temp = head;

            if (temp == null)
            {
                head = newEl;
                return;
            }

            while (temp.Next != null)
            {
                temp = temp.Next;
            }

            temp.Next = newEl;
        }
Esempio n. 3
0
        public void AddAfter(LinkListNode <T> node, LinkListNode <T> newNode)
        {
            if (newNode.List != null || (node?.List ?? this) != this)
            {
                return;
            }

            if (First == null || Last == null)
            {
                First = Last = newNode;
            }
            else if (node == null)
            {
                newNode.Next   = First;
                First.Previous = newNode;
                First          = newNode;
            }
            else
            {
                if (node.Next is LinkListNode <T> nextNode)
                {
                    nextNode.Previous = newNode;
                    newNode.Next      = nextNode;
                }
                else
                {
                    Last = newNode;
                }

                newNode.Previous = node;
                node.Next        = newNode;
            }

            newNode.List = this;
            Count++;
        }
Esempio n. 4
0
 public void AddLast(LinkListNode <T> node) => AddAfter(Last, node);
Esempio n. 5
0
 public void AddFirst(LinkListNode <T> node) => AddBefore(First, node);
Esempio n. 6
0
 public void AddBefore(LinkListNode <T> node, LinkListNode <T> newNode) => AddAfter(node?.Previous, newNode);
Esempio n. 7
0
 private void ClearNode(LinkListNode <T> node)
 {
     node.Previous = node.Next = null;
     node.List     = null;
 }
Esempio n. 8
0
 public LinkList()
 {
     head = null;
 }
Esempio n. 9
0
 private LinkList(LinkListNode <T> head)
 {
     this.head = head;
 }
Esempio n. 10
0
 private void Deconstruct(out LinkListNode <T> head, out LinkList <T> tail)
 {
     head = this.head;
     tail = Tail;
 }