Ejemplo n.º 1
0
        public PList intersect(PList p1, PList p2)
        {
            PList result = new PList(new int[0], false);
            INode pp1    = p1.GetHead();
            INode pp2    = p2.GetHead();

            while (pp1 != null && pp2 != null)
            {
                ComparisonCount++;
                if (pp1.GetData() == pp2.GetData())
                {
                    result.add(new Node(pp1.GetData()));
                    pp1 = pp1.Next();
                    pp2 = pp2.Next();
                }
                else if (pp1.GetData() < pp2.GetData())
                {
                    if (pp1.HasSkip())
                    {
                        ComparisonCount++;
                    }
                    if (pp1.HasSkip() && pp1.GetSkip().GetData() <= pp2.GetData()) //use skip
                    {
                        SkipCount++;
                        pp1 = pp1.GetSkip();
                    }
                    else//normal next
                    {
                        pp1 = pp1.Next();
                    }
                }
                else
                {
                    if (pp2.HasSkip())
                    {
                        ComparisonCount++;
                    }
                    if (pp2.HasSkip() && pp2.GetSkip().GetData() <= pp1.GetData()) //use skip
                    {
                        SkipCount++;
                        pp2 = pp2.GetSkip();
                    }
                    else//normal next
                    {
                        pp2 = pp2.Next();
                    }
                }
            }
            return(result);
        }