예제 #1
0
        public void Add(int value)
        {
            DllNode newNode = new DllNode(value);

            if (Head == null)
            {
                Head = newNode;
                ExpressNode eNode = new ExpressNode(Head);
                Head.Top = eNode;
            }
            else
            {
                DllNode runner     = Head;
                DllNode prevRunner = Head;
                DllNode found      = Head;
                int     count      = 0;
                while (runner.Next != null)
                {
                    if (count >= 5)
                    {
                        ExpressNode newENode = new ExpressNode(runner);
                        runner.Top = newENode;
                        count      = 1;
                    }
                    if (count != 0)
                    {
                        prevRunner = prevRunner.Next;
                    }
                    runner = runner.Next;
                    count++;
                }
                prevRunner  = newNode.Prev;
                runner.Next = newNode;
            }
        }
 public bool Remove(int val)
 {
     if (Head == null)
     {
         return(false);
     }
     else if (Head.Value == val)
     {
         Head      = Head.Next;
         Head.Prev = null;
         return(true);
     }
     else
     {
         DllNode runner = Head;
         while (runner.Next != null)
         {
             if (runner.Value == val)
             {
                 runner.Prev.Next = runner.Next;
                 runner.Next.Prev = runner.Prev;
                 return(true);
             }
         }
         if (runner.Value == val)
         {
             runner.Prev.Next = null;
             return(true);
         }
         else
         {
             return(false);
         }
     }
 }
예제 #3
0
        public void PrintVals()
        {
            DllNode runner = Head;

            while (runner.Next != null)
            {
                if (runner.Top != null)
                {
                    System.Console.WriteLine($"{runner.Value} -> {runner.Top.DNode.Value}");
                }
                else
                {
                    System.Console.WriteLine($"{runner.Value}    |");
                }
                runner = runner.Next;
            }
            if (runner.Top != null)
            {
                System.Console.WriteLine($"{runner.Value} -> {runner.Top.DNode.Value}");
            }
            else
            {
                System.Console.WriteLine($"{runner.Value}    |");
            }
        }
 public void Reverse()
 {
     if (Head == null)
     {
         System.Console.WriteLine("Cannot reverse an empty list");
     }
     else if (Head.Next == null)
     {
         return;
     }
     else
     {
         DllNode runner = Head;
         while (runner.Next != null)
         {
             runner = runner.Next;
         }
         Head = runner;
         DllNode temp = runner.Prev;
         runner.Prev = null;
         runner      = runner.Next;
         while (runner.Next != null)
         {
             if (runner.Prev == null)
             {
                 runner.Next = null;
             }
             temp        = runner.Next;
             runner.Next = runner.Prev;
             runner.Prev = temp;
         }
     }
 }
예제 #5
0
        public void Add(int value)
        {
            DllNode newNode = new DllNode(value);

            if (Head == null)
            {
                Head = newNode;
            }
            else
            {
                DllNode runner     = Head;
                DllNode prevRunner = Head;
                int     count      = 0;
                while (runner.Next != null)
                {
                    if (count != 0)
                    {
                        prevRunner = prevRunner.Next;
                    }
                    runner = runner.Next;
                    count  = 1;
                }
                prevRunner  = newNode.Prev;
                runner.Next = newNode;
            }
        }
예제 #6
0
 public DllNode(int value)
 {
     Value = value;
     Next  = null;
     Prev  = null;
     Top   = null;
 }
예제 #7
0
 public DllNode(int val)
 {
     // your code here
     Value = val;
     Next  = null;
     Prev  = null;
 }
예제 #8
0
        public DllNode Find(int val)
        {
            DllNode runner = Head;

            while (runner.Value != val)
            {
                runner = runner.Next;
            }
            return(runner);
        }
예제 #9
0
        public void PrintVals()
        {
            DllNode runner = Head;

            while (runner.Next != null)
            {
                System.Console.WriteLine(runner.Value);
                runner = runner.Next;
            }
            System.Console.WriteLine(runner.Value);
        }
예제 #10
0
        public IEnumerator <T> GetEnumerator()
        {
            DllNode <T> current = linkedList.Head;

            while (current != null)
            {
                yield return(current.Data);

                current = current.Next;
            }
        }
예제 #11
0
        public DllNode RemoveAtN(int idx)
        {
            DllNode runner = Head;

            for (int i = 0; i < idx - 1; i++)
            {
                runner = runner.Next;
            }
            DllNode retVal = runner.Next;

            runner.Next = runner.Next.Next;
            return(retVal);
        }
예제 #12
0
        public void Reverse()
        {
            DllNode runner = Head;

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

            runner.Prev = runner.Next;
            runner.Next = temp;
        }
예제 #13
0
        public int Remove()
        {
            DllNode runner = Head;

            while (runner.Next.Next != null)
            {
                runner = runner.Next;
            }
            int retVal = runner.Value;

            runner.Next = null;
            return(retVal);
        }
예제 #14
0
    public void printIndo()
    {
        if (Head == null)
        {
            Console.WriteLine("this list is empty");
            return;
        }
        DllNode runner = Head;

        while (runner != null)
        {
            Console.WriteLine("this node's value is : " + runner.Value);
            runner = runner.Next;
        }
    }
예제 #15
0
        public void Push(T data)
        {
            linkedList.PushToHead(data);
            Count++;

            //update middle node
            if (middleNode == null)
            {
                middleNode = linkedList.Head;
            }
            else if (Count % 2 == 0) //added new node to make even list, move middle
            {
                middleNode = middleNode.Prev;
            }
        }
예제 #16
0
    public bool Remove(int value)
    {
        if (Head == null)
        {
            return(false);
        }
        DllNode runner = Head;

        while (runner != null)
        {
            if (runner.Value == value)
            {
                if (runner.Prev != null)
                {
                    if (runner.Next != null) //not the first node or last node
                    {
                        runner.Next.Prev = runner.Prev;
                        runner.Prev.Next = runner.Next;
                        return(true);
                    }
                    else
                    {
                        runner.Prev.Next = null;// last node
                        return(true);
                    }
                }
                else
                {
                    if (runner.Next != null) // the first node but not the last node
                    {
                        runner.Next.Prev = null;
                        Head             = runner.Next;
                        return(true);
                    }
                    else //this list hava only one node
                    {
                        Head = null;
                        return(true);
                    }
                }
            }
            runner = runner.Next;
        }
        Console.WriteLine("didn't find a node contains given value");
        return(false); //didn't find a node contains given value
    }
    public void Add(int val)
    {
        DllNode newNode = new DllNode(val);

        if (Head == null)
        {
            Head = newNode;
        }
        else
        {
            DllNode runner = Head;
            while (runner.Next != null)
            {
                runner = runner.Next;
            }
            runner.Next  = newNode;
            newNode.Prev = runner;
        }
    }
예제 #18
0
        public void Add(int value)
        {
            DllNode newNode = new DllNode(value);

            if (this.Head == null)
            {
                this.Head = newNode;
            }
            else
            {
                DllNode runner = this.Head;
                while (runner.Next != null)
                {
                    runner = runner.Next;
                }
                runner.Next      = newNode;
                runner.Next.Prev = runner;
            }
        }
예제 #19
0
        public T Pop()
        {
            if (Count > 0)
            {
                Count--;
                T data = linkedList.DeleteHeadNode().Data;

                //update middle node
                if (Count == 0)
                {
                    middleNode = null;
                }
                else if (Count % 2 != 0)
                {
                    middleNode = middleNode.Next;
                }

                return(data);
            }
            return(default(T));
        }
예제 #20
0
    public void Reverse()
    {
        if ((Head == null) || (Head.Next == null))
        {
            return;
        }
        DllNode runner1 = Head;
        DllNode runner2 = Head.Next;
        DllNode runner3 = runner2;

        Head.Next = null;
        while (runner2 != null)
        {
            runner3      = runner2.Next;
            runner1.Prev = runner2;
            runner2.Next = runner1;
            runner1      = runner2;
            runner2      = runner3;
        }
        runner1.Prev = null;
        Head         = runner1;
    }
예제 #21
0
    public bool Remove(int value)
    {
        DllNode runner = Head;

        ///Edge case for if our list is empty
        if (this.Head == null)
        {
            return(false);
        }
        ////If a list with a single node contains our value
        if (runner.Next == null)
        {
            if (runner.Value == value)
            {
                ////Only have to repoint the list's head here
                this.Head = null;
                return(true);
            }
            else
            {
                return(false);
            }
        }
        ////If the list has > 1 nodes begin running through the list's nodes
        else
        {
            while (runner.Next != null)
            {
                ////This handles every other possible node position.
                if (runner.Value == value)
                {
                    ////Change all them pointers
                    ////If... reroute the next node's Prev to the previous Node.
                    if (runner.Next != null)
                    {
                        runner.Next.Prev = runner.Prev;
                    }
                    ///This is used to reroute our head past the first node if it contains our value.
                    if (runner.Prev == null)
                    {
                        this.Head = runner.Next;
                    }
                    ////If... reroute the next node's Prev to the previous Node.
                    if (runner.Prev != null)
                    {
                        runner.Prev.Next = runner.Next;
                    }
                    return(true);
                }
                runner = runner.Next;
            }

            ////This handles if the node we want is on the end of the list
            if (runner.Next == null)
            {
                if (runner.Value == value)
                {
                    if (runner.Next != null)
                    {
                        runner.Next.Prev = runner.Prev;
                    }
                    if (runner.Prev != null)
                    {
                        runner.Prev.Next = runner.Next;
                    }
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            return(false);
        }
    }
예제 #22
0
 public DllNode(int val)
 {
     Value = val;
     Next  = null;
     Prev  = null;
 }
예제 #23
0
 public DLList()
 {
     Head = null;
 }
 public DoublyLList()
 {
     Head = null;
 }
예제 #25
0
 public DoublyLinkedList()
 {
     Head = null;
 }
예제 #26
0
 public DllNode(int val)
 {
     this.Value = val;
     this.Next  = null;
     this.Prev  = null;
 }
예제 #27
0
 public DoubleLinkedList()
 {
     this.Head = null;
 }