1、题目描述
(题目难度:简单)
2、示例
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
3、Java代码实现
- ListNode.java
public class ListNode {
//Definition for singly-linked list.
int val;
ListNode next;
ListNode() {}
ListNode(int val) { this.val = val; }
ListNode(int val, ListNode next) { this.val = val; this.next = next; }
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(val+" ");
while (next!=null){
sb.append(next.val + " ");
next = next.next;
}
return sb.toString();
}
}
-
Solution.java
public class Solution03 {
//递归写法
// public static ListNode mergeTwoLists(ListNode l1, ListNode l2) {
// //先进行错判,如果l1和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;
// }
// }
//暴力解法
public static ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode dum0 = new ListNode(-1);
ListNode head = dum0;
while(l1!=null && l2!=null){
if(l1.val <= l2.val){
head.next = l1;
l1 = l1.next;
}else {
head.next = l2;
l2 = l2.next;
}
head = head.next;
}
//先进行错判,如果l1和l2为空的情况
if(l1 !=null)
head.next = l1;
if(l2 != null)
head.next = l2;
return dum0.next;
}
public static void main(String[] args) {
ListNode l1 = new ListNode(1);
l1.next = new ListNode(3);
l1.next.next = new ListNode(5);
ListNode l2 = new ListNode(1);
l2.next = new ListNode(2);
l2.next.next = new ListNode(4);
ListNode dum = new ListNode(-1);
dum = mergeTwoLists(l1,l2);
System.out.println(dum);
}
}
4、运行结果
- 递归写法
- 暴力写法
5、实现思路及其他解法
需要重点理解递归的思想,递归三要素:(1)递归出口(程序结束条件)(2)递归关系式(3)函数作用
有时候暴力解法可以取得很好的效果。