Exemple #1
0
        ISinglyLinkedNode <T> ReverseList(ISinglyLinkedNode <T> Prev, ISinglyLinkedNode <T> Current)
        {
            ISinglyLinkedNode <T> next = Current.Next;

            Current.Next = Prev;
            return((next == null) ? Current : ReverseList(Current, next));
        }
Exemple #2
0
 void ISinglyLinkedList <T> .RemoveHead()
 {
     lock (_head)
     {
         lock (_head.Next)
         {
             _head = _head.Next;
         }
     }
 }
Exemple #3
0
 void PrintNode(ISinglyLinkedNode <T> Node)
 {
     if (Node == null)
     {
         Debug.Write(" | " + "NULL" + " | " + "\n");
         return;
     }
     Debug.Write(" | " + Node.Data + " | " + "-->");
     PrintNode(Node.Next);
 }
Exemple #4
0
        ISinglyLinkedNode <T> ISinglyLinkedList <T> .GetAt(int Index)
        {
            if (Index < 0)
            {
                return(new SinglyLinkedNode <T>());
            }
            ISinglyLinkedNode <T> Temp = _head;

            for (int i = 0; i < Index - 1; i++)
            {
                Temp = Temp.Next;
            }
            return(Temp);
        }
Exemple #5
0
 void ISinglyLinkedList <T> .Remove(ISinglyLinkedNode <T> Node)
 {
     //empty linked list
     if (_head == null)
     {
         return;
     }
     for (ISinglyLinkedNode <T> current = _head, prev = null; current != null; prev = current, current = current.Next)
     {
         if (current.Data.CompareTo(Node.Data) == 0)
         {
             prev.Next = current.Next;
             break;
         }
     }
 }
Exemple #6
0
        void ISinglyLinkedList <T> .ReverseList()
        {
            //               < __ < __ < __ __: reversedPart: head
            //                 (__)__ __ __
            //head :   current:      >  >  >
            ISinglyLinkedNode <T> reversedPart = null;
            ISinglyLinkedNode <T> current      = _head;

            while (current != null)
            {
                ISinglyLinkedNode <T> next = current.Next;
                current.Next = reversedPart;
                reversedPart = current;
                current      = next;
            }
            _head = reversedPart;
        }
        public void SinglyLinkedListTest()
        {
            ISinglyLinkedList <int> singlylinkedlist = new SinglyLinkedList <int>();


            IPrintLinkedList printlist;

            printlist = singlylinkedlist as IPrintLinkedList;

            ISinglyLinkedNode <int> nodeone   = new SinglyLinkedNode <int>(1);
            ISinglyLinkedNode <int> nodetwo   = new SinglyLinkedNode <int>(2);
            ISinglyLinkedNode <int> nodethree = new SinglyLinkedNode <int>(3);
            ISinglyLinkedNode <int> nodefour  = new SinglyLinkedNode <int>(4);


            printlist.PrintLinkedList();

            singlylinkedlist.AddHead(nodeone);
            singlylinkedlist.AddHead(nodetwo);
            singlylinkedlist.AddHead(nodethree);
            singlylinkedlist.AddHead(nodefour);

            printlist.PrintLinkedList();

            ISinglyLinkedNode <int> temp = singlylinkedlist.GetAt(2);

            singlylinkedlist.RemoveAt(2);

            //singlylinkedlist.RemoveAfter(temp);
            //singlylinkedlist.Remove(temp);

            printlist.PrintLinkedList();

            //singlylinkedlist.RemoveHead();

            //printlist.PrintLinkedList();

            //singlylinkedlist.RemoveBefore(nodetwo);

            singlylinkedlist.ReverseList();

            printlist.PrintLinkedList();
        }
Exemple #8
0
        void ISinglyLinkedList <T> .RemoveTail()
        {
            ISinglyLinkedNode <T> currentnode = _head;

            //check if there is only one node. Remove head then
            if (_head.Next == null)
            {
                _head = null;
                return;
            }
            //if there are only two nodes set heads next to null to remove tail
            if (_head.Next != null && _head.Next.Next == null)
            {
                _head.Next = null;
                return;
            }
            for (ISinglyLinkedNode <T> current = _head, child = current.Next, grandchild = child.Next; current != null; current = current.Next)
            {
            }
        }
Exemple #9
0
 void ISinglyLinkedList <T> .RemoveBefore(ISinglyLinkedNode <T> Node)
 {
     //cannot remove before head
     if (object.Equals(Node.Data, _head.Data))
     {
         return;
     }
     //if we need to remove the node before tail then make head and tail the same
     if (Node.Data.CompareTo(_tail.Data) == 0)
     {
         _head = _tail;
         (_tail as IDisposable).Dispose();
     }
     for (ISinglyLinkedNode <T> currentnode = _head, child = null, grandchild = null; currentnode != null; currentnode = currentnode.Next)
     {
         child      = currentnode.Next;
         grandchild = child.Next;
         if (Node.Data.CompareTo(grandchild.Data) == 0)
         {
             currentnode.Next = grandchild;
             break;
         }
     }
 }
Exemple #10
0
 void ISinglyLinkedList <T> .InsertBefore(ISinglyLinkedNode <T> Node, T Data)
 {
     throw new NotImplementedException();
 }
Exemple #11
0
 public SinglyLinkedList()
 {
     _head = null;
     _tail = null;
 }
Exemple #12
0
 void ISinglyLinkedList <T> .Add(ISinglyLinkedNode <T> Data)
 {
     (this as ISinglyLinkedList <T>).AddHead(Data);
 }
 public RecursiveSinglyLinkedList()
 {
     Root = new SentinelNode <T>();
 }
Exemple #14
0
 public SinglyLinkedNode()
 {
     _data = default(T);
     _next = null;
 }
Exemple #15
0
 void ISinglyLinkedList <T> .AddAt(int Index, ISinglyLinkedNode <T> Data)
 {
     throw new NotImplementedException();
 }
Exemple #16
0
 void ISinglyLinkedList <T> .AddTail(ISinglyLinkedNode <T> Data)
 {
     _tail.Next = Data;
     _tail      = Data;
 }
Exemple #17
0
 void ISinglyLinkedList <T> .AddHead(ISinglyLinkedNode <T> Data)
 {
     Data.Next = _head;
     _head     = Data;
 }
Exemple #18
0
 public SinglyLinkedNode(T data)
 {
     _data = data;
     _next = null;
 }
Exemple #19
0
 void ISinglyLinkedList <T> .RemoveAfter(ISinglyLinkedNode <T> Node)
 {
     Node.Next = Node.Next.Next;
 }