Esempio n. 1
0
        public void Traverse()
        {
            Console.WriteLine("######### Traverse Linklist #########");
            DoubleLinkListNode current = header;

            while (current != null)
            {
                Console.WriteLine(current.data);
                current = current.next;
            }
        }
Esempio n. 2
0
        public void InsertNodeAtBegining(int value)
        {
            DoubleLinkListNode node = new DoubleLinkListNode(value);

            if (header.next != null)
            {
                node.next            = header.next;
                header.next.previous = node;
            }

            header = node;
        }
Esempio n. 3
0
        public void InsertNodeBefore(int value, int before)
        {
            DoubleLinkListNode current = Find(before);

            if (current != null)
            {
                DoubleLinkListNode node = new DoubleLinkListNode(value);
                node.next             = current;
                node.previous         = current.previous;
                current.previous.next = node;
                current.previous      = node;
            }
        }
Esempio n. 4
0
        public void InsertNodeAtEnd(int value)
        {
            DoubleLinkListNode node    = new DoubleLinkListNode(value);
            DoubleLinkListNode current = header;

            while (current.next != null)
            {
                current = current.next;
            }

            node.previous = current;
            current.next  = node;
        }
Esempio n. 5
0
        public void TraverseBackward()
        {
            Console.WriteLine("######### Traverse Backward #########");
            DoubleLinkListNode current = header;

            while (current.next != null)
            {
                current = current.next;
            }

            while (current != null)
            {
                Console.WriteLine(current.data);
                current = current.previous;
            }
        }
Esempio n. 6
0
        public void DeleteNode(int value)
        {
            DoubleLinkListNode current = Find(value);

            if (current != null)
            {
                current.previous.next = current.next;

                if (current.next != null)
                {
                    current.next.previous = current.previous;
                }

                current = null;
            }
        }
Esempio n. 7
0
        public void InsertNodeAfter(int value, int after)
        {
            DoubleLinkListNode current = Find(after);

            if (current != null)
            {
                DoubleLinkListNode node = new DoubleLinkListNode(value);

                if (current.next != null)
                {
                    node.next             = current.next;
                    current.next.previous = node;
                }

                node.previous = current;
                current.next  = node;
            }
        }
Esempio n. 8
0
        public DoubleLinkListNode Find(int value)
        {
            DoubleLinkListNode current = header;

            while (current != null)
            {
                if (current.data == value)
                {
                    break;
                }
                else
                {
                    current = current.next;
                }
            }

            return(current);
        }
Esempio n. 9
0
        public void IsListCircular()
        {
            DoubleLinkListNode fast = header;
            DoubleLinkListNode slow = header;

            if (header == null || header.next == null)
            {
                Console.WriteLine("List is not circular");
            }

            while (true)
            {
                fast = fast.next.next;
                slow = slow.next;

                if (fast == null || fast.next == null)
                {
                    Console.WriteLine("List is not circular");
                    return;
                }
                else if (fast == slow || fast.next == slow)
                {
                    Console.WriteLine("List is circular");

                    slow = header;
                    while (true)
                    {
                        if (slow == fast)
                        {
                            Console.WriteLine("Circular link list start from: " + slow.data);
                            return;
                        }
                        else
                        {
                            fast = fast.next.next;
                            slow = slow.next;
                        }
                    }
                }
            }
        }
Esempio n. 10
0
        private void doublelinklist_Click(object sender, EventArgs e)
        {
            DoubleLinkList list = new DoubleLinkList();

            list.InsertNodeAtBegining(1);
            list.InsertNodeAfter(3, 1);
            list.InsertNodeBefore(2, 3);
            list.InsertNodeAtEnd(4);
            list.InsertNodeAtEnd(5);
            list.InsertNodeAfter(6, 5);
            list.DeleteNode(3);

            list.Traverse();
            list.TraverseBackward();

            //Make list circular
            DoubleLinkListNode second = list.Find(2);
            DoubleLinkListNode node   = list.Find(6);

            node.next = second;

            list.IsListCircular();
        }
Esempio n. 11
0
 public DoubleLinkList()
 {
     header = new DoubleLinkListNode();
 }