Beispiel #1
0
        public NumLinkedNode Merge_Recurse(NumLinkedNode a1, NumLinkedNode b1)
        {
            NumLinkedNode res;

            if (a1 == null)
            {
                return(b1);
            }
            if (b1 == null)
            {
                return(a1);
            }

            if (a1.Value < b1.Value)
            {
                res = new NumLinkedNode(a1.Value);
                a1  = a1.Next;
            }
            else
            {
                res = new NumLinkedNode(b1.Value);
                b1  = b1.Next;
            }

            res.Next = Merge_Recurse(a1, b1);

            return(res);
        }
Beispiel #2
0
        public void Should_Correctly_Merge_Linked_List()
        {
            var a1 = new NumLinkedNode(1);
            var a2 = new NumLinkedNode(3);
            var a3 = new NumLinkedNode(5);

            a1.Next = a2;
            a2.Next = a3;

            var b1 = new NumLinkedNode(2);
            var b2 = new NumLinkedNode(4);
            var b3 = new NumLinkedNode(6);

            b1.Next = b2;
            b2.Next = b3;

            var res = _mergeLinkedList.Merge_Recurse(a1, b1);

            res.Value.Should().Be(1);
            res.Next.Value.Should().Be(2);

            //var res2 = _mergeLinkedList.Merge(null, b1);
            //res2.Value.Should().Be(2);
            //res2.Next.Value.Should().Be(4);
        }
Beispiel #3
0
        public NumLinkedNode Merge(NumLinkedNode a1, NumLinkedNode b1)
        {
            NumLinkedNode p1 = a1;
            NumLinkedNode p2 = b1;
            NumLinkedNode res;
            NumLinkedNode resHead;

            if (a1 == null)
            {
                return(b1);
            }
            if (b1 == null)
            {
                return(a1);
            }

            if (p1.Value < p2.Value)
            {
                res = new NumLinkedNode(p1.Value);
                p1  = p1.Next;
            }
            else
            {
                res = new NumLinkedNode(p2.Value);
                p2  = p2.Next;
            }

            resHead = res;

            while (p1 != null || p2 != null)
            {
                if (p1 == null)
                {
                    res.Next = p2;
                    p2       = p2.Next;
                    res      = res.Next;
                    continue;
                }

                if (p2 == null)
                {
                    res.Next = p1;
                    p1       = p1.Next;
                    res      = res.Next;
                    continue;
                }

                if (p1.Value < p2.Value)
                {
                    res.Next = p1;
                    p1       = p1.Next;
                }
                else
                {
                    res.Next = p2;
                    p2       = p2.Next;
                }
                res = res.Next;
            }

            return(resHead);
        }