示例#1
0
        public void TestMergeBothEmpty()
        {
            LinkedList.Classes.LinkedList lla = new LinkedList.Classes.LinkedList();
            LinkedList.Classes.LinkedList llb = new LinkedList.Classes.LinkedList();

            Node head = Program.MergeList(lla, llb);

            Assert.Null(head);
        }
示例#2
0
        public void TestMergeSecondEmpty()
        {
            LinkedList.Classes.LinkedList lla = new LinkedList.Classes.LinkedList();
            LinkedList.Classes.LinkedList llb = new LinkedList.Classes.LinkedList();

            lla.Append(1);
            lla.Append(3);

            Node head = Program.MergeList(lla, llb);

            Assert.Equal(3, head.Next.Value);
        }
示例#3
0
        public void TestMergeFirstEmpty()
        {
            LinkedList.Classes.LinkedList lla = new LinkedList.Classes.LinkedList();
            LinkedList.Classes.LinkedList llb = new LinkedList.Classes.LinkedList();

            llb.Append(2);
            llb.Append(4);

            Node head = Program.MergeList(lla, llb);

            Assert.Equal(4, head.Next.Value);
        }
示例#4
0
        public void TestMergeSecondLong()
        {
            LinkedList.Classes.LinkedList lla = new LinkedList.Classes.LinkedList();
            LinkedList.Classes.LinkedList llb = new LinkedList.Classes.LinkedList();

            lla.Append(1);
            llb.Append(2);
            lla.Append(3);
            llb.Append(4);

            llb.Append(5);
            llb.Append(6);

            Node head = Program.MergeList(lla, llb);

            Assert.Equal(6, head.Next.Next.Next.Next.Next.Value);
        }
示例#5
0
        public static Node MergeList(LinkedList.Classes.LinkedList lla, LinkedList.Classes.LinkedList llb)
        {
            if (lla.Head == null || llb.Head == null)
            {
                if (lla.Head != null)
                {
                    return(lla.Head);
                }
                else if (llb.Head != null)
                {
                    return(llb.Head);
                }
                else
                {
                    return(null);
                }
            }

            Node curra = lla.Head;
            Node currb = llb.Head;

            while (curra.Next != null && currb.Next != null)
            {
                Node nexta = curra.Next;
                Node nextb = currb.Next;
                curra.Next = currb;
                currb.Next = nexta;
                curra      = nexta;
                currb      = nextb;
            }

            if (curra.Next == null)
            {
                curra.Next = currb;
            }

            if (currb.Next == null)
            {
                currb.Next = curra.Next;
                curra.Next = currb;
            }

            return(lla.Head);
        }