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); }
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); }
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); }