public CtciLinkedListNode <T> FindBeginning(CtciLinkedListNode <T> head) { if (head == null) { throw new Exception("Incorrect Data"); } CtciLinkedListNode <T> slow = head; CtciLinkedListNode <T> fast = head; do { if (fast.Next == null || fast.Next.Next == null) { return(null); } slow = slow.Next; fast = fast.Next.Next; } while (slow != fast); slow = head; while (slow != fast) { slow = slow.Next; fast = fast.Next; } return(slow); }
public Q07_Result <T> FindLengthAndLastNode(CtciLinkedListNode <T> listNode) { int length = 1; while (listNode.Next != null) { listNode = listNode.Next; length++; } return(new Q07_Result <T>(length, listNode)); }
public CtciLinkedListNode <T> FindIntersection(CtciLinkedListNode <T> listNode1, CtciLinkedListNode <T> listNode2) { if (listNode1 == null || listNode2 == null) { throw new Exception("Incorrect Data"); } Q07_Result <T> result1 = FindLengthAndLastNode(listNode1); Q07_Result <T> result2 = FindLengthAndLastNode(listNode2); if (result1.lastNode != result2.lastNode) { return(null); } CtciLinkedListNode <T> longer; CtciLinkedListNode <T> shorter; if (result1.length >= result2.length) { longer = listNode1; shorter = listNode2; } else { longer = listNode2; shorter = listNode1; } int diff = result1.length - result2.length; for (int i = 0; i < diff; i++) { longer = longer.Next; } while (longer != null) { if (longer == shorter) { return(longer); } longer = longer.Next; shorter = shorter.Next; } return(null); }
public void FindIntersection() { CtciLinkedListNode <int> listHead1 = new CtciLinkedListNode <int>(1); CtciLinkedListNode <int> listHead2 = new CtciLinkedListNode <int>(1); CtciLinkedListNode <int> node1 = new CtciLinkedListNode <int>(1); CtciLinkedListNode <int> node2 = new CtciLinkedListNode <int>(1); CtciLinkedListNode <int> node3 = new CtciLinkedListNode <int>(1); CtciLinkedListNode <int> node4 = new CtciLinkedListNode <int>(1); CtciLinkedListNode <int> node5 = new CtciLinkedListNode <int>(1); CtciLinkedListNode <int> node6 = new CtciLinkedListNode <int>(1); CtciLinkedListNode <int> node7 = new CtciLinkedListNode <int>(1); CtciLinkedListNode <int> node8 = new CtciLinkedListNode <int>(1); CtciLinkedListNode <int> node9 = new CtciLinkedListNode <int>(1); CtciLinkedListNode <int> node10 = new CtciLinkedListNode <int>(1); CtciLinkedListNode <int> node11 = new CtciLinkedListNode <int>(1); CtciLinkedListNode <int> node12 = new CtciLinkedListNode <int>(1); listHead1.Next = node1; node1.Next = node2; node2.Next = node3; node3.Next = node4; node4.Next = node5; node5.Next = node6; node6.Next = node7; node7.Next = node8; node8.Next = node9; node9.Next = node10; listHead2.Next = node11; node11.Next = node12; Assert.Equal(null, intersection.FindIntersection(listHead1, listHead2)); node12.Next = node6; Assert.Equal(node6, intersection.FindIntersection(listHead1, listHead2)); }
public void FindBeginning() { CtciLinkedListNode <int> node1 = new CtciLinkedListNode <int>(1); CtciLinkedListNode <int> node2 = new CtciLinkedListNode <int>(2); CtciLinkedListNode <int> node3 = new CtciLinkedListNode <int>(3); CtciLinkedListNode <int> node4 = new CtciLinkedListNode <int>(4); CtciLinkedListNode <int> node5 = new CtciLinkedListNode <int>(5); CtciLinkedListNode <int> node6 = new CtciLinkedListNode <int>(6); CtciLinkedListNode <int> node7 = new CtciLinkedListNode <int>(7); CtciLinkedListNode <int> node8 = new CtciLinkedListNode <int>(8); CtciLinkedListNode <int> node9 = new CtciLinkedListNode <int>(9); CtciLinkedListNode <int> node10 = new CtciLinkedListNode <int>(10); CtciLinkedListNode <int> node11 = new CtciLinkedListNode <int>(11); CtciLinkedListNode <int> node12 = new CtciLinkedListNode <int>(12); node1.Next = node2; node2.Next = node3; node3.Next = node4; node4.Next = node5; node5.Next = node6; node6.Next = node7; node7.Next = node8; node8.Next = node9; node9.Next = node10; node10.Next = node11; node11.Next = node12; node12.Next = node5; Assert.Equal(node5, loopDetection.FindBeginning(node1)); node12.Next = node7; Assert.Equal(node7, loopDetection.FindBeginning(node1)); node12.Next = null; Assert.Null(loopDetection.FindBeginning(node1)); }
public Q07_Result(int length, CtciLinkedListNode <T> lastNode) { this.length = length; this.lastNode = lastNode; }