将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4
一个递归简单也好理解:
/// <summary>
/// 递归调用
/// </summary>
/// <param name="l1"></param>
/// <param name="l2"></param>
/// <returns></returns>
public static ListNode Method1(ListNode l1, ListNode l2)
{
if (l1 == null) return l2;//如果第一个链表为空,返回第二个链表头结点
if (l2 == null) return l1;//如果第二个结点为空,返回第一个链表头结点
ListNode tmpNode;
if (l1.val < l2.val)
{
tmpNode = l1;
tmpNode.next = Method1(l1.next, l2);
}
else
{
tmpNode = l2;
tmpNode.next = Method1(l1, l2.next);
}
return tmpNode;
}
另一个就是普通的遍历了:
/// <summary>
/// 遍历排序
/// </summary>
/// <param name="l1"></param>
/// <param name="l2"></param>
/// <returns></returns>
public static ListNode Method2(ListNode l1, ListNode l2)
{
if (l1 == null) return l2;//如果第一个链表为空,返回第二个链表头结点
if (l2 == null) return l1;//如果第二个结点为空,返回第一个链表头结点
ListNode root = new ListNode(0);
ListNode tmpNode = root;
while (l1 != null && l2 != null)
{
if (l1.val < l2.val)
{
tmpNode.next = l1;//引
l1 = l1.next;
}
else
{
tmpNode.next = l2;
l2 = l2.next;
}
tmpNode = tmpNode.next;
}
if (l1 != null)
{
tmpNode.next = l1;
}
if (l2 != null)
{
tmpNode.next = l2;
}
return root.next;
}
}