Leetcode #21 Merge Two Sorted Lists 合并有序链表 解题报告
2016-03-23 20:54
459 查看
0 题外话
嗯,从这次开始我就把题目换一下,改成解题报告了,因为我小节小结总是不分,等有时间也去改下之前的解题报告咯~~我算了下自己的速度,作为一个本学期的额外爱好,到现在21天刷了100题,速度也还算好,毕竟像今天这样基本一题没法刷的时间占到一周的一半多的时间。
1 解题思想
题目是给两个单链表,里面的数值都是有序的,现在要求他们合并成一个有序链表。这道题的做法就是,从两个单链表的头结点开始分别设立两个指针p,q,和一个新的临时头结点prehead(结果),同时每次比较的时候,选择p q当中最小的一个,修改指针到prehead那条链表的末尾,然后移动指针。。当p或q有一个到末尾后,则将剩下的那一部分直接链入最终结果当中。
2 原题
Merge Two Sorted ListsMerge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.
3 AC解
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ /** * 合并有序的列表,设两个长度分别为n,m 那么时间复杂度为O(n+m) * * 分别设两个指针,都从对应序列的起点开始,每次选择最小的一个,加入到新的链表当中 * * 值得学习的点:最开始我写的是每次比较厚都生成一个新的ListNode,后面才反应过来,对于链表的题,如果他没有要求的话,那么并不需要重新new,只需要每次都改变下指针就好 * */ public class Solution { public ListNode mergeTwoLists1(ListNode l1, ListNode l2) { ListNode head=new ListNode(0); ListNode p=head; int val1,val2; while(l1!=null || l2!=null){ val1=Integer.MAX_VALUE; val2=Integer.MAX_VALUE; if(l1!=null){ val1=l1.val; } if(l2!=null){ val2=l2.val; } if(val1<val2){ p.next=l1; l1=l1.next; } else{ p.next=l2; l2=l2.next; } p=p.next; } return head.next; } /** * 这个版本充分利用了上述特性进行加速,注意判断l1 l2是否到结尾的时候,如果有一边为空,那么直接连接到另一个的当前位置返回就好 * * leetcode上都是1ms,不过这个方法更优 * */ public ListNode mergeTwoLists(ListNode l1, ListNode l2) { ListNode head=new ListNode(0); ListNode p=head; int val1,val2; while(l1!=null || l2!=null){ val1=Integer.MAX_VALUE; val2=Integer.MAX_VALUE; if(l1!=null){ val1=l1.val; } else{ p.next=l2; break; } if(l2!=null){ val2=l2.val; } else{ p.next=l1; break; } if(val1<val2){ p.next=l1; l1=l1.next; } else{ p.next=l2; l2=l2.next; } p=p.next; } return head.next; } }
相关文章推荐
- EasyuiAPI:菜单
- ex_KMP--Theme Section
- Android中的5中数据存储方式之SharedPreferences存储
- Palindrome Number---9
- PAT (Advanced Level) Practise 1077 Kuchiguse (20)
- 斯坦福程序中统计语料单词个数程序片段解释
- Unity基础知识总结
- Android手势源码浅析-----手势绘制(GestureOverlayView)
- tab选项卡-jQuery
- 作业三:代码规范、代码复审、PSP
- XAMPP的
- WebRTC简介及其与SIP互通
- 迷宫的最短路径
- Poj 3176 Cow Bowling【dp】
- Android Studio 设置内存大小及原理
- 堆排序
- HDOJ 1728 逃离迷宫(DFS)
- 【5】ARM-根文件系统
- 并查集
- Ubuntu系统下创建python数据挖掘虚拟环境