题目:
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
解法一:非递归,循环遍历合并
public ListNode mergeTwoLists(ListNode l1, ListNode l2) { if (l1 == null && l2 == null){ return null; } if (l1 == null || l2 == null){ return l1==null?l2:l1; } ListNode p = l1; ListNode q = l2; ListNode temp = new ListNode(0); ListNode pp = temp; while (p != null && q != null){ if (p.val <= q.val){ pp.next = p; p = p.next; }else { pp.next = q; q = q.next; } pp = pp.next; } pp.next = (p!=null)?p:q; return temp.next; }
解法二:递归,参考自cyc2018
public ListNode mergeTwoLists(ListNode l1, ListNode l2) { if (l1 == null) return l2; if (l2 == null) return l1; if (l1.val < l2.val) { l1.next = mergeTwoLists(l1.next, l2); return l1; } else { l2.next = mergeTwoLists(l1, l2.next); return l2; } }