Ejemplo n.º 1
0
        public static LinkedListNode isIntersect(LinkedListNode L1, LinkedListNode L2)
        {
            LinkedListNode intersection = new LinkedListNode();
            if (!checkTail(L1, L2))
            {
                intersection = null;
                return intersection;
            }
            else
            {
                int pointerDifference = Math.Abs(findLength(L1) - findLength(L2));
                LinkedListNode longNode =
                pointerDifference == 0 ? L1 : findLength(L1) > findLength(L2) ? L1 : L2;
                LinkedListNode shortNode =
                 pointerDifference == 0 ? L2 : findLength(L1) < findLength(L2) ? L1 : L2;
                LinkedListNode startingNode = pointerDifference == 0 ? L1 : returnKthNode(longNode, pointerDifference);

                while (startingNode != null && shortNode != null)
                {
                    if (startingNode == shortNode)
                    {
                        intersection = startingNode;
                        return intersection;
                    }
                    startingNode = startingNode.next;
                    shortNode = shortNode.next;
                }
                return null;
            }
            LinkedListNode returnKthNode(LinkedListNode L, int k)
            {
                LinkedListNode startingNode = new LinkedListNode();

                while (L != null && k > 0)
                {
                    L = L.next;
                    k--;
                }
                startingNode = L;
                return startingNode;


            }
            bool checkTail(LinkedListNode L1, LinkedListNode L2)
            {

                if (findTail(L1) == findTail(L2))
                {
                    return true;
                }
                return false;
            }
            LinkedListNode findTail(LinkedListNode L)
            {
                LinkedListNode Tail = new LinkedListNode();
                while (L != null)
                {
                    if (L.next == null)
                    {
                        Tail = L;
                    }
                    L = L.next;
                }
                return Tail;
            }
            int findLength(LinkedListNode L)
            {
                int Length = 0;
                while (L != null)
                {
                    Length++;
                    L = L.next;
                }
                return Length;
            }
        }