コード例 #1
0
        static MyLinkList <int> Merge(MyLinkList <int> a, MyLinkList <int> b)
        {
            var        pointA  = a.Header;
            var        pointB  = b.Header;
            Node <int> current = new Node <int>();
            Node <int> header  = pointA.Data <= pointB.Data ? pointA : pointB;

            while (pointA != null && pointB != null)
            {
                if (pointA.Data <= pointB.Data)
                {
                    current.Next = pointA;
                    pointA       = pointA.Next;
                }
                else
                {
                    current.Next = pointB;
                    pointB       = pointB.Next;
                }
                current = current.Next;
            }

            if (pointA != null)
            {
                current.Next = pointA;
            }
            if (pointB != null)
            {
                current.Next = pointB;
            }

            var newLinkList = new MyLinkList <int>(header);

            return(newLinkList);
        }
コード例 #2
0
        static void Main(string[] args)
        {
            var listA = new MyLinkList <int>(1);

            listA.AppendAtTail(4);
            listA.AppendAtTail(7);
            listA.AppendAtTail(22);
            listA.AppendAtTail(30);
            listA.AppendAtTail(31);


            //listA.Reverse();
            //listA.Output();

            var listB = new MyLinkList <int>(1);

            listB.AppendAtTail(3);
            listB.AppendAtTail(8);
            listB.AppendAtTail(11);
            listB.AppendAtTail(29);
            listB.AppendAtTail(30);

            //listA.Output();

            //var t = Merge(listA, listB);cc
            var t2 = MergeRecursive(listA.Header, listB.Header);

            listB.Output(t2);
            Console.ReadKey();
        }