/// <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; } }
/// <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; } }
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 }); }
/// <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(); }
public DoubleLinkNode(T data) { this.Data = data; this.previous = this; this.Next = this; }