1.题目描述:
2.解题思路:
本题是要合并两个已经有序的单链表,思路很简单,有两种方法:非递归和递归。
3.Java代码:
(1)非递归:
为方便操作,定义一个辅助的头节点,然后比较原来两个链表的头节点,将小的那一个加入到合并链表,最后,当其中一个链表为空时,直接将另一个链表接入到合并链表即可。
//public class LeetCode21 为测试
public class LeetCode21 {
public static void main(String[] args) {
ListNode m1=new ListNode(1),m2=new ListNode(3),m3=new ListNode(5);
m1.next=m2;
m2.next=m3;
System.out.println("链表1:"+m1.val+"->"+m2.val+"->"+m3.val);
ListNode n1=new ListNode(2),n2=new ListNode(4),n3=new ListNode(6);
n1.next=n2;
n2.next=n3;
System.out.println("链表2:"+n1.val+"->"+n2.val+"->"+n3.val);
ListNode result=new Solution().mergeTwoLists(m1, n1);
if(result!=null){
System.out.print("合并链表:"+result.val);
ListNode resultNext=result.next;
while(resultNext!=null){
System.out.print("->"+resultNext.val);
resultNext=resultNext.next;
}
}
}
}
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode fakeHead=new ListNode(0);
ListNode p=fakeHead;
while(l1!=null&&l2!=null){
if(l1.val<l2.val){
p.next=l1;
l1=l1.next;
}else{
p.next=l2;
l2=l2.next;
}
p=p.next;
}
if(l1!=null) p.next=l1;
if(l2!=null) p.next=l2;
return fakeHead.next;
}
}
class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
测试结果:
(2)递归:
//public class LeetCode21 为测试
public class LeetCode21 {
public static void main(String[] args) {
ListNode m1=new ListNode(1),m2=new ListNode(3),m3=new ListNode(5);
m1.next=m2;
m2.next=m3;
System.out.println("链表1:"+m1.val+"->"+m2.val+"->"+m3.val);
ListNode n1=new ListNode(2),n2=new ListNode(4),n3=new ListNode(6);
n1.next=n2;
n2.next=n3;
System.out.println("链表2:"+n1.val+"->"+n2.val+"->"+n3.val);
ListNode result=new Solution().mergeTwoLists(m1, n1);
if(result!=null){
System.out.print("合并链表:"+result.val);
ListNode resultNext=result.next;
while(resultNext!=null){
System.out.print("->"+resultNext.val);
resultNext=resultNext.next;
}
}
}
}
class Solution {
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;
}
}
}
class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
测试结果:
【LeetCode21】Merge Two Sorted Lists★的更多相关文章
-
【leetcode】Merge k Sorted Lists
Merge k Sorted Lists Merge k sorted linked lists and return it as one sorted list. Analyze and descr ...
-
【leetcode】Merge Two Sorted Lists
Merge two sorted linked lists and return it as a new list. The new list should be made by splicing t ...
-
【leetcode】Merge Two Sorted Lists(easy)
Merge two sorted linked lists and return it as a new list. The new list should be made by splicing t ...
-
【Leetcode】【Hard】Merge k Sorted Lists
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. 解 ...
-
【leetcode】Merge k Sorted Lists(按大小顺序连接k个链表)
题目:Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity ...
-
【Leetcode】【Easy】Merge Two Sorted Lists .
Merge two sorted linked lists and return it as a new list. The new list should be made by splicing t ...
-
【LeeCode23】Merge k Sorted Lists★★★
1.题目描述: 2.解题思路: 题意:将K个已经排序的链表合并成一个排序的链表,分析并描述所用算法的复杂度. 方法一:基于“二分”思想的归并排序.本文用非递归和递归两种方法实现. (1)非递归:归并排 ...
-
【LeetCode】Merge Two Sorted Lists(合并两个有序链表)
这道题是LeetCode里的第21道题. 题目描述: 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1-&g ...
-
【LeetCode-easy】Merge Two Sorted Lists
思路:指针p用于串联怎个链表,比较两个指针的大小,连接较小的一个.如果一个链表到达链尾,连接另外一个链表余下来的所以节点. public ListNode mergeTwoLists(ListNode ...
随机推荐
-
Python的作用域
Python的作用域 转自:http://www.cnblogs.com/frydsh/archive/2012/08/12/2602100.html Python是静态作用域语言,尽管它自身是一个动 ...
-
homework01
第一眼看到这个题目的时候就意识到这道题应该使用动态规划来解决,但因代码能力有限,因此从一维的问题开始解决,用C语言编写,代码如下: int maxsum(int *p,int size){ int i ...
-
C#中多线程写DataGridView出现滚动条导致程序卡死(无响应)的解决办法
因为写的程序涉及到多线程维护一个DataGridView,然后蛋疼的发现经常卡死...一开始以为是读写冲突的原因,然后就加了锁,问题依旧...然后发现每次出现滚动条的时候程序才会无响应,所以感觉应该是 ...
-
255.Spring Boot+Spring Security:使用md5加密
说明 (1)JDK版本:1.8 (2)Spring Boot 2.0.6 (3)Spring Security 5.0.9 (4)Spring Data JPA 2.0.11.RELEASE (5)h ...
-
linux文件与目录管理笔记
### Linux文件与目录管理 ---------- 绝对路径: / 相对路径:不以/开头的 当前目录 . 上一个工作目录 - 用户主目录 ~ root账户的主目录是/root 其他用户是/home ...
-
ios app: 使用企业license设置发布app的过程
ios开发者证书与企业证书的内容,关系,以及ios app 使用企业license设置发布app的过程 iOS是一个非常封闭的系统.授权文件(.mobileprovision)和签名证书文件(.c ...
-
Exp4 恶意代码分析 20164321 王君陶
Exp4 恶意代码分析 20164321 王君陶 1.实践目标 1.1是监控你自己系统的运行状态,看有没有可疑的程序在运行. 1.2是分析一个恶意软件,就分析Exp2或Exp3中生成后门软件:分析工具 ...
-
JAVA自学日记——Part Ⅲ
终于来到了可视化窗口制作的部分了,从学习JAVA之前,到开始入手学习,一直到现在,都在盼望着有一天可以自己写出一款有界面而且是很美观的应用程序,今天算是一个真正开始的时间节点,值得纪念. 内容有很多, ...
-
创造101:如果软件测试工程师组团出道,怎样才能站C位?!
作者 C位出道的华华 虽然华华是一个软件测试技术宅,可以连续七七四十九天加班不重样,心里除了上班工作学习写代码就没有别的爱好了,但是各种潮流资讯啊狗血剧啊娱乐综艺啊,从来没有错过. 比如说现在大火的& ...
-
bzoj 1965 数学
首先我们可以发现每张牌的对应关系,假设序号为x的牌,经过一次洗牌后的位置为: 2*x x<=n/2 2*(x-n/2)-1 x>n/2 那么我们可以将下面的式子化简,变成2*x-n ...