( Leetcode 21 ) Merge Two Sorted Lists
2016-05-13 20:23
399 查看
题目:Merge Two Sorted Lists
Merge 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.
解题思路:
虽然这道题比较简单,首先人人都能想到最基本的那种解法,即设置两个指针来依次比较。但是下面我说一种完全不同的思路。
首先思路是以链表L1为中心链表,最后返回L1,L2链表是插入到L1链表上面的,总的是靠来回交换两个链表完成的。
1. 比较L1和L2的头结点,如果L1头结点比L2大,那么交换着两个结点
2. 设置p指向L1,依次和L2结点大小比较,如果p的下一个结点比L2结点大,那么将L2的后半段接到L1后面,L1的后半段变成L2链表
3. 重复1 和 2.
具体看下面的Java代码:
Merge 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.
解题思路:
虽然这道题比较简单,首先人人都能想到最基本的那种解法,即设置两个指针来依次比较。但是下面我说一种完全不同的思路。
首先思路是以链表L1为中心链表,最后返回L1,L2链表是插入到L1链表上面的,总的是靠来回交换两个链表完成的。
1. 比较L1和L2的头结点,如果L1头结点比L2大,那么交换着两个结点
2. 设置p指向L1,依次和L2结点大小比较,如果p的下一个结点比L2结点大,那么将L2的后半段接到L1后面,L1的后半段变成L2链表
3. 重复1 和 2.
具体看下面的Java代码:
public class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) { if (l1 == null) return l2; if (l2 == null) return l1; //最终的返回结果是以l1为中心链,l2往l1上面插结点 ListNode tmp; if (l1.val > l2.val) { //交换两个头结点 tmp = l2; l2 = l1; l1 = tmp; } ListNode p = l1; while (l2 != null) { while (p.next != null && p.next.val <= l2.val) p = p.next; tmp = p.next; p.next = l2; l2 = tmp; } return l1; } }
相关文章推荐
- 团队项目第七天
- Java读写记事本文件
- uva 784 DFS 染色问题。有坑点。一个getchar()
- Is it possible to let gcc 4.7 and gcc 4.8 co-exist
- 探索推荐引擎内部的秘密,第 2 部分: 深入推荐引擎相关算法 - 协同过滤
- Android内核开发:学会分析系统的启动log
- leetcode.207. Course Schedule
- 蓝桥杯 兰顿蚂蚁
- POJ 1442 Black Box(treap树)
- 数据库连接池的几种配置方法
- word2016怎么从第三页开始设置页码
- 团队冲刺第七天
- 分别使用委托、接口、匿名方法、泛型委托实现加减乘除运算
- 学习Android studio 个人总结小经验
- 共享库的概念
- 欢迎使用CSDN-markdown编辑器
- 皇宫看守 树形DP
- Java设计模式
- PAT乙级—1027. 打印沙漏(20)-native
- ural 1039 没有上司的晚会 树形dp