Leecode 21.合并两个有序链表(Java 迭代、递归两种方法)

1 //官方:
2 class Solution {
3 public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
4 ListNode prehead = new ListNode(-1);
5
6
7 ListNode prev = prehead;
8 while (l1 != null && l2 != null) {
9 if (l1.val <= l2.val) {
10 prev.next = l1;
11 l1 = l1.next;
12 } else {
13 prev.next = l2;
14 l2 = l2.next;
15 }
16 prev = prev.next;
17 }
18
19
20 // 合并后 l1 和 l2 最多只有一个还未被合并完,我们直接将链表末尾指向未合并完的链表即可
21 prev.next = l1 == null ? l2 : l1;
22
23
24 return prehead.next;
25 }
26 }
27
28
29 作者:LeetCode-Solution
30 链接:https://leetcode-cn.com/problems/merge-two-sorted-lists/solution/he-bing-liang-ge-you-xu-lian-biao-by-leetcode-solu/
31 来源:力扣(LeetCode)
32 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
我写的:
1 /**
2 * Definition for singly-linked list.
3 * public class ListNode {
4 * int val;
5 * ListNode next;
6 * ListNode() {}
7 * ListNode(int val) { this.val = val; }
8 * ListNode(int val, ListNode next) { this.val = val; this.next = next; }
9 * }
10 */
11 class Solution {
12
13 public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
14 ListNode start = new ListNode(-1);
15 ListNode q = start;
16 if(list1==null || list2==null){//输入为空时
17 if(list1==null){
18 return list2;
19 }else{
20 return list1;
21 }
22 }
23
24 //设两个指针pa和pb,不断移动pa和pb,并进行比较,则将较小元素接到新链表,该过程直至pa或pb为null
25 while(list1!=null && list2!=null){
26 if(!(list1.val>list2.val)){
27 //list1<=list2
28 q.next = list1;
29 list1 = list1.next;
30 }else{//list1>list2
31 q.next = list2;
32 list2 = list2.next;
33 }
34 q = q.next;
35 }
36
37 //之后将未空的接到新链表之后,得到完整升序链表
38 q.next = list1 == null ? list2 : list1;
39 return start.next;
40 }
41 }
1 class Solution {
2 public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
3 if (l1 == null) {
4 return l2;
5 } else if (l2 == null) {
6 return l1;
7 } else if (l1.val < l2.val) {
8 l1.next = mergeTwoLists(l1.next, l2);
9 return l1;
10 } else {
11 l2.next = mergeTwoLists(l1, l2.next);
12 return l2;
13 }
14 }
15 }
16
17
18 作者:LeetCode-Solution
19 链接:https://leetcode-cn.com/problems/merge-two-sorted-lists/solution/he-bing-liang-ge-you-xu-lian-biao-by-leetcode-solu/
20 来源:力扣(LeetCode)
21 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
Leecode 21.合并两个有序链表(Java 迭代、递归两种方法)的更多相关文章
- 合并两个有序链表(java实现)
题目: 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出:1->1-&g ...
- LeetCode--021--合并两个有序链表(java)
将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出:1->1->2- ...
- 剑指offer-反向遍历链表-栈和递归2种方法(一次性跑通)
- 斐波那契数列-java编程:三种方法实现斐波那契数列
题目要求:编写程序在控制台输出斐波那契数列前20项,每输出5个数换行 斐波那契数列指的是这样一个数列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, … 这个数列 ...
- Java实现 LeetCode 21 合并两个有序链表
21. 合并两个有序链表 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出:1 ...
- LeetCode 21. 合并两个有序链表(Merge Two Sorted Lists)
21. 合并两个有序链表 21. Merge Two Sorted Lists 题目描述 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. LeetCode ...
- [LeetCode] 21. 合并两个有序链表
题目链接:https://leetcode-cn.com/problems/merge-two-sorted-lists/ 题目描述: 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定 ...
- Leecode刷题之旅-C语言/python-21.合并两个有序链表
/* * @lc app=leetcode.cn id=21 lang=c * * [21] 合并两个有序链表 * * https://leetcode-cn.com/problems/merge-t ...
- [LC]21题 Merge Two Sorted Lists (合并两个有序链表)(链表)
①英文题目 Merge two sorted linked lists and return it as a new list. The new list should be made by spli ...
- LeetCode 21:合并两个有序链表 Merge Two Sorted Lists
将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. Merge two sorted linked lists and return it as a new ...
随机推荐
- 【快速学】C/C++编译器
编译器 谁维护 平台 版权 Visual C++ Microsoft https://visualstudio.microsoft.com/ Microsoft Windows 有免费版 GCC C ...
- golang常见编程错误集
一.append是深拷贝, func main() { a := []int{7, 8, 9} fmt.Printf("%+v\n", a) ap(a) fmt.Println(& ...
- 【python学习】数据结构第一节
1.访问元组或列表中的值 (注:元素是从0开始从左往有编号的,或者从右向左编号[-1开始]) 列表 x1 = [1,2,3,4] 元组 x2 =(1,2,3,4) print(x2[0]) ...
- javaSE-验证码生成
一.使用Math类的radom() 方法 //生成验证码 String verifcationCode = ""; for (int i = 0; i <= 5; i++) ...
- virtualenv管理py环境linux版
因为服务器上已经安装了python3,所以直接安装virtualenv即可 pip3 install virtualenv -i https://mirrors.aliyun.com/pypi/sim ...
- Mac怎么安装Andriod模拟器
Mac上怎么安装 Andriod 系统模拟器?有的朋友可能需要在自己用的 Mac 电脑上安装Andriod 系统模拟器,用于开发或测试一些安卓软件.介绍下怎么在 Mac 上用 Parallels De ...
- 7.golang语言学习,标识符的命名规范
1.凡是自己可以命名的都是标识符 2.命名规则 a.由26个英文字母,数字0-9,_组成 b.不能数字开头 c.严格区分大小写 d.不能包含空格 e.下划线"_"本身在go中是一个 ...
- idea引入ojdbc包报错
网上下载或者让同事传两个jar过来,ojdbc6-11.2.0.7.0.jar 以及jconn3.0.jar 放入同一个文件夹中: 在此文件夹中cmd如下:回车,进入cmd控制台. 输入如下两个命令: ...
- JS篇(007)-事件委托是什么
答案:利用事件冒泡的原理,让自己的所触发的事件,让他的父元素代替执行! 解析: 1.那什么样的事件可以用事件委托,什么样的事件不可以用呢? 适合用事件委托的事件:click,mousedown,mou ...
- c二级
一·基本数据结构与算法 算法基本概念 算法:解决问题的方法 程序:用某种语言来诠释算法,将算法写成代码. 算法基本特征: 1.可行性 2.确定性 3.有穷性 4.有足够的情报 算法的基本要素 1.算法 ...