一.鄙人的解法
需求:合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例 1:
输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]
示例 2:
输入:l1 = [], l2 = []
输出:[]
示例 3:
输入:l1 = [], l2 = [0]
输出:[0]
提示:
两个链表的节点数目范围是 [0, 50]
-100 <= Node.val <= 100
l1 和 l2 均按 非递减顺序 排列
代码
思路
运行主方法:入口
import org.junit.Test;
/**
* 一句话注释
*
* @author 王子威
* @date 2021/4/21
*/
public class wzwsuanfa
{
/**
* 入口
* 1.创建链表l1和l2
* 2.调用法方法
* 3.显示结果
*/
@Test
public void cs(){
//入口
// l1创建
ListNode l1 = new ListNode(1);
l1.next = new ListNode(2);
l1.next.next = new ListNode(4);
// l2创建
ListNode l2 = new ListNode(1);
l2.next = new ListNode(3);
l2.next.next = new ListNode(4);
//调用方法
ListNode a = mergeTwoLists(l1,l2);
System.out.println("a.toString() = " + a.toString());
}
/**
* 合并两个有序链表算法
* @param l1 有序链表1
* @param l2 有序链表2
* @return
*/
private ListNode mergeTwoLists(ListNode l1, ListNode l2)
{
if(l1 == null)
{
return l2;
}
else if(l2 == null){
return l1;
}
else if (l1.val > l2.val)
{
l2.next = mergeTwoLists(l1,l2.next);
return l2;
}
else
{
l1.next = mergeTwoLists(l1.next, l2);
return l1;
}
}
}
需要辅助的类:ListNode
/**
* 一句话注释
*
* @author 王子威
* @date 2021/4/21
*/
public class ListNode
{
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()
{
ListNode ln = this;
StringBuilder sb = new StringBuilder();
while(ln != null){
sb.append(ln.val +" ");
ln = ln.next;
}
return sb.toString();
}
}
作者:王子威
总结
- 学习了合并两个有序链表算法
- 扩展了对链表的理解
- 算法兴趣+1
- 加强了对算法的分析能力