示例#1
0
        public void AddBefore(MySinglyLinkedListNode <T> node, MySinglyLinkedListNode <T> newNode)
        {
            if (node == null || newNode == null)
            {
                throw new ArgumentNullException();
            }
            if (Count == 0)
            {
                throw new ArgumentException();
            }

            if (node == Head)
            {
                AddFirst(newNode);
            }
            else
            {
                var h = Head;
                while (h != null && h.Next != node)
                {
                    h = h.Next;
                }
                if (h == null)
                {
                    throw new ArgumentException();
                }
                newNode.Next = h.Next;
                h.Next       = newNode;
                Count++;
            }
        }
示例#2
0
        public void AddAfter(MySinglyLinkedListNode <T> node, MySinglyLinkedListNode <T> newNode)
        {
            if (node == null || newNode == null)
            {
                throw new ArgumentNullException();
            }
            if (Count == 0)
            {
                throw new ArgumentException();
            }
            MySinglyLinkedListNode <T> head = Head;

            while (head != null && head != node)
            {
                head = head.Next;
            }
            if (head == null)
            {
                throw new ArgumentException();
            }

            newNode.Next = head.Next;
            head.Next    = newNode;
            Count++;
        }
示例#3
0
        public MySinglyLinkedList(MySinglyLinkedListNode <T> head)
        {
            Head = head;

            var h = head;

            while (h != null)
            {
                Count++;
                h = h.Next;
            }
        }
示例#4
0
 private MySinglyLinkedListNode <T> FindLastHelper(
     MySinglyLinkedListNode <T> node, T value)
 {
     if (node.Next != null)
     {
         var res = FindLastHelper(node.Next, value);
         if (res != null)
         {
             return(res);
         }
     }
     if (node.Data.Equals(value))
     {
         return(node);
     }
     return(null);
 }
示例#5
0
        public void AddFirst(MySinglyLinkedListNode <T> node)
        {
            if (node == null)
            {
                throw new ArgumentNullException();
            }

            if (Head == null)
            {
                Head = node;
            }
            else
            {
                node.Next = Head;
                Head      = node;
            }
            Count++;
        }
示例#6
0
 public void AddLast(MySinglyLinkedListNode <T> node)
 {
     if (node == null)
     {
         throw new ArgumentNullException();
     }
     if (Head == null)
     {
         Head = node;
     }
     else
     {
         var h = Head;
         while (h.Next != null)
         {
             h = h.Next;
         }
         h.Next = node;
     }
     Count++;
 }
示例#7
0
        public bool Remove(MySinglyLinkedListNode <T> node)
        {
            if (node == null)
            {
                throw new ArgumentNullException();
            }

            var h = Head;

            while (h != null)
            {
                if (h.Next == node)
                {
                    h.Next = h.Next.Next;
                    Count--;
                    return(true);
                }
                h = h.Next;
            }
            return(false);
        }
示例#8
0
 public MySinglyLinkedList(T data)
 {
     Head  = new MySinglyLinkedListNode <T>(data);
     Count = 1;
 }
示例#9
0
 public bool Contains(MySinglyLinkedListNode <T> node)
 => Find(node.Data) != null;