Example #1
0
        /// <summary>
        /// 循环链表的遍历
        /// </summary>
        public void Visit()
        {
            Console.Write(this.Data);

            DoubleLinkNode <T> p = this.Next;

            while (p != null && p != this)
            {
                Console.Write("==> " + p.Data);
                p = p.Next;
            }
        }
Example #2
0
        /// <summary>
        /// 当前节点后插入一个新的节点
        /// </summary>
        /// <param name="targetNode"></param>
        public void InsertAfter(DoubleLinkNode <T> targetNode)
        {
            if (targetNode != null)
            {
                targetNode.previous = this;
                targetNode.Next     = this.Next;

                if (targetNode.Next != null) //this.next !=null
                {
                    targetNode.Next.previous = targetNode;
                }

                this.Next = targetNode;
            }
        }
Example #3
0
        public static void TestDoubleLinkInsert()
        {
            DoubleLinkNode <int> first = new DoubleLinkNode <int>(1);

            DoubleLinkNode <int> second = new DoubleLinkNode <int>(2);

            first.previous  = null;
            first.Next      = second;
            second.previous = first;
            second.Next     = null;

            first.InsertAfter(new DoubleLinkNode <int>(3)
            {
                Next = null, previous = null
            });
        }
Example #4
0
        /// <summary>
        /// 测试循环双链表的遍历 - 避免死循环
        /// </summary>
        public static void TestDoubleCycleLinkListVisit()
        {
            DoubleLinkNode <int> first = new DoubleLinkNode <int>(1);

            first.Next     = null;
            first.previous = null;
            var node2 = new DoubleLinkNode <int>(2);

            first.Next     = node2;
            node2.previous = first;

            var node3 = new DoubleLinkNode <int>(3);

            node2.Next     = node3;
            node3.previous = node2;

            var node4 = new DoubleLinkNode <int>(4);

            node3.Next     = node4;
            node4.previous = node3;

            var node5 = new DoubleLinkNode <int>(5);

            node4.Next     = node5;
            node5.previous = node4;

            var node6 = new DoubleLinkNode <int>(6);

            node5.Next     = node6;
            node6.previous = node5;
            node6.Next     = first;

            first.previous = node6;

            first.Visit();
        }
Example #5
0
 public DoubleLinkNode(T data)
 {
     this.Data     = data;
     this.previous = this;
     this.Next     = this;
 }